Penegasan dan Penukaran Jenis Dinamakan dalam Go
Apabila menentukan jenis tersuai dalam Go, anda boleh mentakrifkan semula jenis yang dipratentukan dengan nama baharu. Walau bagaimanapun, apabila cuba menggunakan jenis tersuai ini dalam fungsi yang menjangkakan jenis yang dipratentukan, ralat mungkin berlaku. Mari kita selidiki sebab di sebalik ralat ini dan teroka penyelesaian.
Pertimbangkan kod berikut:
<code class="go">type Answer string func acceptMe(str string) { fmt.Println(str) } func main() { var ans Answer = "hello" // Cannot use ans (type Answer) as type string in function argument acceptMe(ans) // Invalid type assertion: ans.(string) (non-interface type Answer on left) acceptMe(ans.(string)) // Works, but why? acceptMe(string(ans)) }</code>
Mengapa Penegasan Jenis Gagal
Taip penegasan hanya berfungsi untuk antara muka. Antara muka boleh mempunyai sebarang jenis asas, membenarkan penegasan jenis atau suis jenis. Walau bagaimanapun, dalam kes ini, Jawapan ialah jenis tersuai dengan satu jenis asas, rentetan. Tidak ada keperluan untuk penegasan jenis kerana penukaran kepada jenis asas dijamin berjaya.
Mengapa Penukaran Berfungsi
Penukaran, sebaliknya, boleh dilakukan antara jenis yang mempunyai hubungan yang diketahui, seperti yang berlaku dengan Jawapan dan rentetan. Rentetan sintaks(ans) secara eksplisit menukar jenis Jawapan kepada jenis rentetan asas.
Kesimpulan
Adalah penting untuk memahami perbezaan antara penegasan jenis dan penukaran. Penegasan jenis harus digunakan dengan antara muka untuk menyemak jenis asas secara dinamik. Penukaran, sebaliknya, digunakan untuk menukar secara eksplisit antara jenis dengan perhubungan yang diketahui. Dalam kes Jawapan dan rentetan, penukaran ialah pendekatan yang disyorkan kerana ia menyediakan cara yang boleh diramal dan jelas untuk saling beroperasi dengan jenis asas.
Atas ialah kandungan terperinci Mengapa Penegasan Jenis Gagal dengan Jenis Tersuai dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!