Dalam Go, penegasan jenis dinamakan digunakan untuk menguji sama ada nilai melaksanakan antara muka yang diberikan. Walau bagaimanapun, pendekatan ini tidak digunakan secara langsung pada jenis yang dinamakan yang mentakrifkan semula jenis yang dipratakrifkan dengan nama baharu.
Pertimbangkan kod berikut:
<code class="go">type Answer string func acceptMe(str string) { fmt.Println(str) } func main() { type Answer string var ans Answer = "hello" // Type assertion fails: acceptMe(ans.(string)) // Conversion to underlying type succeeds: acceptMe(string(ans)) }</code>
Jenis penegasan ans.(rentetan ) gagal kerana ia cuba menyemak sama ada jenis Jawapan melaksanakan antara muka rentetan, yang tidak. Sebaliknya, Jawapan ialah jenis tersuai yang mentakrifkan semula rentetan.
Sebaliknya, rentetan penukaran(ans) berjaya kerana ia secara langsung menukar nilai Jawapan kepada jenis rentetan asasnya. Memandangkan Jawapan ialah jenis yang dinamakan untuk rentetan, penukaran ini sentiasa sah.
Mengapakah penegasan jenis tidak berfungsi untuk jenis yang dinamakan?
Jenis penegasan direka untuk antara muka. Antara muka boleh mempunyai berbilang pelaksanaan (dikenali sebagai jenis konkrit), dan penegasan jenis digunakan untuk menyemak sama ada nilai melaksanakan antara muka tersebut. Walau bagaimanapun, jenis yang dinamakan mempunyai jenis asas tetap, yang diketahui pada masa penyusunan. Oleh itu, penegasan jenis tidak diperlukan dan tidak boleh dilakukan untuk jenis yang dinamakan.
Bila hendak menggunakan penukaran dan bukannya penegasan jenis?
Gunakan penukaran apabila anda ingin menukar nama taip kepada jenis asasnya. Ini berguna apabila anda perlu menghantar nilai kepada fungsi atau antara muka yang menjangkakan jenis tertentu tetapi boleh menerima jenis asasnya.
Atas ialah kandungan terperinci Mengapakah Penegasan Taip Tidak Berfungsi untuk Jenis Dinamakan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!