Rumah >pembangunan bahagian belakang >Golang >Mengapa Penegasan Jenis Go Gagal dengan Jenis Alias?
Pertimbangkan kod Go berikut:
package main import "fmt" type somethingFuncy func(int) bool func funcy(i int) bool { return i%2 == 0 } func main() { var a interface{} = funcy _ = a.(func(int) bool) // Works fmt.Println("Awesome -- apparently, literally specifying the func signature works.") _ = a.(somethingFuncy) // Panics fmt.Println("Darn -- doesn't get here. But somethingFuncy is the same signature as func(int) bool.") }
Penegasan jenis pertama berfungsi apabila secara eksplisit mengisytiharkan jenis sebagai func(int) bool. Walau bagaimanapun, yang kedua menggunakan jenis alias somethingFuncy panik.
Tidak seperti pemutus, taip penegasan dalam Go dengan ketat membandingkan jenis sebenar nilai yang ditegaskan. Oleh itu, jenis alias somethingFuncy, walaupun berkongsi tandatangan yang sama seperti func(int) bool, dianggap sebagai jenis yang berbeza.
Penegasan jenis dilakukan dalam kod berikut, yang hanya membandingkan jenis untuk kesaksamaan:
func main() { var a interface{} = funcy switch v := a.(type) { case func(int) bool: // Type successfully asserted as func(int) bool case somethingFuncy: // Type successfully asserted as somethingFuncy default: // Type assertion failed } }
Perbandingan ini gagal apabila menggunakan alias jenis kerana ia memerlukan padanan jenis yang tepat.
Atas ialah kandungan terperinci Mengapa Penegasan Jenis Go Gagal dengan Jenis Alias?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!