में इंटरफ़ेस और पूर्णांक तुलना मुझे समझ में नहीं आता कि पहला परिणाम गलत क्यों है जबकि दूसरा सत्य है।गोलांग
किसी भी मदद की सराहना की जाएगी।
func main() {
var i interface{}
i = uint64(0)
fmt.Println("[1] ", reflect.TypeOf(i), i == 0)
i = 0
fmt.Println("[2] ", reflect.TypeOf(i), i == 0)
var n uint64 = 32
fmt.Println("[3] ", reflect.TypeOf(n), n == 32)
}
// result
// [1] uint64 false
// [2] int true
// [3] uint64 true
क्योंकि 0
एक untyped निरंतर जिसका डिफ़ॉल्ट प्रकार int
, नहीं uint64
, और जब एक अंतरफलक के साथ तुलना कर रही है, बात आप तुलना कर रहे हैं दोनों एक ही प्रकार होना चाहिए करने के लिए है इसे यहाँ Go playground
तुम क्यों == इस तरह के 'मैं। (Uint64) के रूप में प्रकार दावे का उपयोग कर सकते 0'? क्या संकलक मानता है कि '0' एक 'uint64' भी है? https://play.golang.org/p/YT-pZCdI27 – Ngenator
एक बार जब आप एक प्रकार दावे करते हैं, आप लंबे समय तक एक मूल्य के साथ एक इंटरफेस की तुलना नहीं कर रहे हैं, तो आप एक मूल्य के साथ एक मूल्य की तुलना कर रहे हैं ताकि आप की आवश्यकता को खो देते हैं उनके गतिशील प्रकार बराबर होने की आवश्यकता है। – dave
तकनीकी तौर पर '0' एक' int' नहीं है, यह एक [ "untyped निरंतर"] (https://golang.org/ref/spec#Constants) है कि एक डिफ़ॉल्ट प्रकार में बदला न गया में इसकी नियुक्ति की वजह से 'int' एक अभिव्यक्ति। – JimB