शून्य त्रुटि उदाहरण शून्य के रूप में प्रदर्शित नहीं हो रहे हैं
इंटरफ़ेस तुलनाओं को समझने में, यह पहचानना महत्वपूर्ण है कि वे प्रकार और मूल्य दोनों का मूल्यांकन करते हैं।
कोड स्निपेट पर विचार करें:
type Goof struct {}
func (goof *Goof) Error() string {
return fmt.Sprintf("I'm a goof")
}
func TestError(err error) {
if err == nil {
fmt.Println("Error is nil")
} else {
fmt.Println("Error is not nil")
}
}
func main() {
var g *Goof // nil
TestError(g) // expect "Error is nil"
}
यहां, हम उम्मीद करते हैं कि "त्रुटि शून्य नहीं है" क्योंकि जी शून्य है। हालाँकि, इंटरफ़ेस तुलनाओं के कारण, हमें "त्रुटि शून्य है" मिलती है। ऐसा इसलिए है क्योंकि (*Goof)(nil) में error(nil) से भिन्न प्रकार है।
इसे हल करने के लिए, आप var g *Goof के बजाय var err त्रुटि घोषित कर सकते हैं। वैकल्पिक रूप से, यदि आपका फ़ंक्शन कोई त्रुटि देता है, तो बस शून्य लौटाएं।
आगे स्पष्टीकरण के लिए, इंटरफ़ेस तुलना यह जांचती है कि क्या प्रकार समान हैं, न कि यह कि क्या कोई प्रकार एक इंटरफ़ेस लागू करता है। इस प्रकार, निम्नलिखित उदाहरण दर्शाता है कि समान अंतर्निहित डेटा वाले गैर-शून्य इंटरफ़ेस की तुलना विभिन्न प्रकारों के कारण असमान के रूप में की जा सकती है:
package main
import "fmt"
type Bob int
func main() {
var x int = 3
var y Bob = 3
var ix, iy interface{} = x, y
fmt.Println(ix == iy)
}
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3