गो में, आप एक ही प्रकार के चर गुणा कर सकते हैं, इसलिए आपको अभिव्यक्ति के दोनों हिस्सों को एक ही प्रकार की आवश्यकता होनी चाहिए।
सबसे सरल चीज जो आप कर सकते हैं वह गुणा करने से पहले अवधि के लिए एक पूर्णांक कास्टिंग कर रहा है, लेकिन यह यूनिट सेमेन्टिक्स का उल्लंघन करेगा। इकाइयों की अवधि में अवधि के दौरान अवधि का गुणा क्या होगा?
मैं नहीं बल्कि एक int64 को time.Millisecond परिवर्तित करना चाहते हैं, और उसके बाद मिलीसेकेंड की संख्या से गुणा करें, तो time.Duration लिए डाली:
time.Duration(int64(time.Millisecond) * int64(rand.Int31n(1000)))
इस तरह अभिव्यक्ति के किसी भी हिस्से में कहा जा सकता इसके प्रकार के अनुसार एक सार्थक मूल्य है। int64(time.Millisecond)
भाग केवल एक आयामी मान है - मूल मूल्य में समय की छोटी इकाइयों की संख्या।
तो एक से थोड़ा सरल रास्ता चलना:
time.Duration(rand.Int31n(1000)) * time.Millisecond
गुणन के बाएं हिस्से बकवास है - प्रकार "time.Duration" का मान, अपने प्रकार के लिए कुछ अप्रासंगिक पकड़े:
numberOfMilliseconds := 100
// just can't come up with a name for following:
someLHS := time.Duration(numberOfMilliseconds)
fmt.Println(someLHS)
fmt.Println(someLHS*time.Millisecond)
और यह केवल अर्थशास्त्र नहीं है, प्रकारों से जुड़ी वास्तविक कार्यक्षमता है। इस कोड को प्रिंट:
100ns
100ms
दिलचस्प है, कोड नमूना यहाँ सबसे सरल कोड, अवधि रूपांतरण का एक ही भ्रामक अर्थ विज्ञान के साथ उपयोग करता है: https://golang.org/pkg/time/#Duration
सेकंड: = 10
fmt.Print (समय। अवधि (सेकंड) * समय। दूसरा) // प्रिंट 10s
स्रोत
2017-10-17 14:32:29
धन्यवाद जो काम करता है। मैंने यादृच्छिक संख्या जनरेटर 'रैंड को बीजिंग के बारे में भी सीखा। सईद (समय.अब() यूनिक्स()) –
सिर्फ मेरे ज्ञान के लिए, निम्नलिखित कार्य कैसे करते हैं? 'समय। सो जाओ (समय। दूसरा * 2)' –
यह काम करता है क्योंकि स्थिरांक का उपयोग अनुकूली प्रकार है, इस पर आधारित है कि उनका उपयोग कैसे किया जाता है। रोब पाइक द्वारा इस ब्लॉग पोस्ट को देखें जो इसे विस्तार से समझाता है: http://blog.golang.org/constants – mna