Penegasan dan Penukaran Jenis Dinamakan dalam Go
Dalam Go, penegasan dan penukaran jenis bernama membenarkan pembangun memanipulasi jenis data tersuai dan pratakrif. Walau bagaimanapun, salah tanggapan boleh timbul apabila berurusan dengan jenis tersuai yang mentakrifkan semula jenis yang dipratentukan. Mari kita teroka isu ini secara terperinci.
Pertimbangkan contoh kod berikut:
<code class="go">type Answer string func acceptMe(str string) { fmt.Println(str) } func main() { type Answer string var ans Answer = "hello" // Illegal usage acceptMe(ans) // Failed type assertion acceptMe(ans.(string)) // Works (but why?) acceptMe(string(ans)) }</code>
S: Mengapa penegasan jenis (ans.(rentetan)) gagal, manakala penukaran (string(ans)) berfungsi?
J: Penegasan jenis hanya terpakai pada jenis antara muka, yang mewakili kontrak yang boleh dipenuhi oleh nilai. Memandangkan jenis tersuai seperti Jawapan bukan antara muka, percubaan untuk menegaskannya menggunakan sintaks penegasan jenis akan mengakibatkan ralat.
Sebaliknya, penukaran secara eksplisit mengubah satu jenis kepada yang lain. Penukaran (rentetan(ans)) berjaya kerana Jawapan mempunyai jenis rentetan asas. Go secara tersirat menukar Ans kepada rentetan asasnya sebelum menghantarnya kepada acceptMe.
Nota Tambahan:
Atas ialah kandungan terperinci Mengapa Penegasan Jenis Gagal dengan Jenis Tersuai dalam Go, Tetapi Penukaran Berjaya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!