Di Go, jika Anda mendefinisikan tipe baru misalnya:
type MyInt int
Anda tidak dapat meneruskan a MyIntke fungsi yang mengharapkan int, atau sebaliknya:
func test(i MyInt) {
//do something with i
}
func main() {
anInt := 0
test(anInt) //doesn't work, int is not of type MyInt
}
Baik. Tetapi mengapa hal yang sama tidak berlaku untuk fungsi? misalnya:
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
}
Sekarang, saya tidak mengeluh karena saya tidak perlu melakukan cast newfuncuntuk mengetik MyFunc, seperti yang harus saya lakukan di contoh pertama; sepertinya tidak konsisten. Saya yakin ada alasan bagus untuk itu; Adakah yang bisa mencerahkan saya?
Alasan saya bertanya terutama karena saya ingin mempersingkat beberapa jenis fungsi saya yang agak panjang dengan cara ini, tetapi saya ingin memastikan hal ini diharapkan dan dapat diterima untuk dilakukan :)
typelebih berguna di Go daripada Scala. Scala hanya memiliki alias tipe, sayangnya.