Go'da, yeni bir tür tanımlarsanız, örneğin:
type MyInt int
O zaman a'yı MyInt
int bekleyen bir işleve geçiremezsiniz veya tam tersi:
func test(i MyInt) {
//do something with i
}
func main() {
anInt := 0
test(anInt) //doesn't work, int is not of type MyInt
}
İnce. Peki o zaman neden aynı şey işlevler için geçerli değil? Örneğin:
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
}
Benim açıkça döküm zorunda kaydeder çünkü Şimdi, Ben şikayetçi değilim newfunc
tipine MyFunc
İlk örnekte yapmak zorunda kalacak gibi; sadece tutarsız görünüyor. Eminim bunun iyi bir nedeni vardır; kimse beni aydınlatabilir mi?
Sormamın nedeni, esas olarak, oldukça uzun olan bazı fonksiyon türlerimi bu şekilde kısaltmak istemem, ancak bunu yapmanın beklenen ve kabul edilebilir olduğundan emin olmak istiyorum :)
type
Go'da Scala'dan daha kullanışlıdır. Scala'nın yalnızca tür takma adları vardır, ne yazık ki.