2011-11-27 12 views
9

क्या कोई गो फ़ंक्शन है जो हर रन में सही छद्म यादृच्छिक संख्या देता है? मेरा वास्तव में क्या मतलब है, निम्नलिखित कोड पर विचार करें,गो रैंड पैकेज के साथ कठिनाई

package main 

import (
    "fmt" 
    "rand" 
) 

func main() { 
    fmt.Println(rand.Int31n(100)) 
} 

हर बार जब मैं इस कोड को निष्पादित करता हूं, तो मुझे एक ही आउटपुट मिलता है। क्या कोई ऐसी विधि है जो प्रत्येक बार अलग-अलग, यादृच्छिक परिणाम लौटाएगी?

उत्तर

13

पैकेज rand छद्म यादृच्छिक संख्या है, जो एक विशिष्ट प्रारंभिक मूल्य के आधार पर उत्पन्न कर रहे हैं उत्पन्न करने के लिए इस्तेमाल किया जा सकता है (बुलाया "बीज")।

इस शुरुआती बीज के लिए एक लोकप्रिय पसंद उदाहरण के लिए नैनोसेकंड में वर्तमान समय है - एक मूल्य जो संभवतः आपके प्रोग्राम को कई बार निष्पादित करते समय भिन्न होगा। आप कुछ इस तरह से वर्तमान समय के साथ यादृच्छिक जनरेटर को प्रारंभ कर सकते हैं:

rand.Seed(time.Now().UnixNano()) 

भी एक और पैकेज है जो इस्तेमाल किया जा सकता crypto/rand कहा जाता है (उस के लिए time पैकेज आयात करने के लिए मत भूलना) बेहतर यादृच्छिक मूल्य उत्पन्न करने के लिए (यह जनरेटर उपयोगकर्ता के माउस आंदोलनों, प्रोसेसर की वर्तमान गर्मी और कई अन्य कारकों को ध्यान में रख सकता है)। हालांकि, इस पैकेज में कार्य कई बार धीमे होते हैं और जब तक आप पास-वाक्यांश जेनरेटर (या अन्य सुरक्षा संबंधी सामान) नहीं लिखते हैं, तो सामान्य रैंड पैकेज शायद ठीक है।

+2

सादे रैंड की एक और उपयोगी संपत्ति यह है कि आप बीज का पुन: उपयोग करके अपने परिणामों को पुन: उत्पन्न कर सकते हैं। –

+1

go1 समय के साथ। नैनोसेकंड() मौजूद नहीं प्रतीत होता है। आप rand.Seed (time.Now()। यूनिक्स नैनो()) का उपयोग कर सकते हैं – Blacksad

1

आपको पहले आरएनजी बीज करना होगा।

मैं जाओ उपयोग नहीं किया है, लेकिन यह शायद rand.Seed(x);

+0

आप इस मतलब है, पैकेज मुख्य आयात "fmt" आयात "रैंड" समारोह मुख्य() { rand.Seed (100); \t fmt.Println (rand.Int31n (100)) }। यह सभी रनों को भी आउटपुट दे रहा है। – Arpssss

+0

ऐसा इसलिए है क्योंकि आप इसे स्थिर संख्या 100 के साथ बीज कर रहे हैं :-) कुछ और अद्वितीय का उपयोग करने का प्रयास करें, जैसे कि वर्तमान समय मिलीसेकंड में। –

0

rand.Seed(time.Now().UnixNano()) उबंटू पर काम करता है। मैंने हमेशा rand.Seed(time.Nanoseconds()) पर शोध किया। अंततः मुझे उदाहरण मिला: गोलांग दौरे पर Google खोज 2.1।