में, यदि आप एक नए प्रकार को परिभाषित करते हैं जैसे:
type MyInt int
फिर आप MyIntएक int, या इसके विपरीत की अपेक्षा कर रहे फ़ंक्शन को पास नहीं कर सकते :
func test(i MyInt) {
//do something with i
}
func main() {
anInt := 0
test(anInt) //doesn't work, int is not of type MyInt
}
ठीक। लेकिन ऐसा क्यों है कि यह फ़ंक्शन पर लागू नहीं होता है? उदाहरण के लिए:
type MyFunc func(i int)
func (m MyFunc) Run(i int) {
m(i)
}
func run(f MyFunc, i int) {
f.Run(i)
}
func main() {
var newfunc func(int) //explicit declaration
newfunc = func(i int) {
fmt.Println(i)
}
run(newfunc, 10) //works just fine, even though types seem to differ
}
अब, मुझे शिकायत नहीं है क्योंकि यह मुझे newfuncटाइप करने के लिए स्पष्ट रूप से डालने के लिए बचाता है MyFunc, जैसा कि मुझे पहले उदाहरण में करना होगा; यह सिर्फ असंगत लगता है। मुझे यकीन है कि इसके लिए एक अच्छा कारण है; क्या कोई मुझे बता सकता है?
मेरे द्वारा पूछे जाने का मुख्य कारण यह है कि मैं इस तरह से अपने कुछ लंबे फ़ंक्शन प्रकारों को छोटा करना चाहूंगा, लेकिन मैं यह सुनिश्चित करना चाहता हूं कि ऐसा करने की उम्मीद है और स्वीकार्य है :)
typeबल्कि स्काला की तुलना में गो में अधिक उपयोगी है। स्काला में केवल उपनाम, उपनाम हैं।