Dalam Go, penghantaran digunakan untuk menukar nilai kepada jenis data yang berbeza. Walau bagaimanapun, apabila berurusan dengan alias jenis, pendekatan yang sedikit berbeza diperlukan, seperti yang ditunjukkan di bawah.
Pertimbangkan kod berikut:
type somethingFuncy func(int) bool func funcy(i int) bool { return i%2 == 0 } var a interface{} = funcy func main() { _ = a.(func(int) bool) // Works _ = a.(somethingFuncy) // Panics }
Di sini, penegasan jenis pertama (_ = a.(func(int) bool)) berjaya menukar nilai a kepada jenis fungsi func(int) bool. Walau bagaimanapun, penegasan kedua (_ = a.(somethingFuncy)) gagal dengan panik.
Sebab panik terletak pada sifat penegasan jenis dalam Go. Untuk penegasan jenis, hanya jenis nilai sebenar yang penting. Dalam kes ini, jenis a ialah antara muka{}, yang diberikan nilai fungsi fungsi. Walau bagaimanapun, somethingFuncy ialah alias jenis yang berbeza, walaupun berkongsi tandatangan fungsi yang sama seperti func(int) bool.
Dalam Go, penegasan taip menentukan sama ada nilai adalah daripada nilai tertentu taip dan, jika ya, ekstrak nilai asas. Sintaks ialah x.(T), dengan x ialah nilai dan T ialah jenis sasaran. Perkara utama di sini ialah jenis sasaran mesti sepadan dengan jenis x yang tepat, tanpa sebarang alias.
Malangnya, tiada cara langsung untuk menghantar ke tandatangan fungsi yang lebih panjang menggunakan penegasan jenis. Ini kerana penegasan jenis hanya mempertimbangkan jenis nilai yang tepat, bukan keserasiannya dengan jenis lain.
Walaupun penghantaran jenis adalah penting dalam Go untuk menukar nilai antara jenis data yang berbeza, ia adalah penting untuk memahami batasan apabila berurusan dengan jenis alias. Penegasan jenis bergantung pada padanan jenis yang tepat dan percubaan untuk menegaskan nilai pada tandatangan fungsi yang lebih panjang selalunya akan mengakibatkan panik.
Atas ialah kandungan terperinci Mengapa Jenis Penegasan Panik Apabila Menghantar ke Alias Jenis dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!