Wenn Sie in Go einen neuen Typ definieren, z.
type MyInt int
Sie können a dann nicht MyInt
an eine Funktion übergeben, die ein int erwartet, oder umgekehrt:
func test(i MyInt) {
//do something with i
}
func main() {
anInt := 0
test(anInt) //doesn't work, int is not of type MyInt
}
Fein. Aber warum gilt das nicht auch für Funktionen? z.B:
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
}
Jetzt beschwere ich mich nicht, weil ich dadurch nicht explizit newfunc
in Typ umwandeln muss MyFunc
, wie ich es im ersten Beispiel tun müsste. es scheint nur inkonsistent. Ich bin sicher, es gibt einen guten Grund dafür; kann mich jemand aufklären?
Der Grund, den ich frage, ist hauptsächlich, dass ich einige meiner ziemlich langen Funktionstypen auf diese Weise kürzen möchte, aber ich möchte sicherstellen, dass dies erwartet und akzeptabel ist :)
type
ist in Go eher nützlich als in Scala. Scala hat leider nur Typ-Aliase.