Mengapakah Penegasan Taip Tidak Berfungsi untuk Jenis Dinamakan dalam Go?

Patricia Arquette
Lepaskan: 2024-11-05 04:41:01
asal
701 orang telah melayarinya

Why Don't Type Assertions Work for Named Types in Go?

Jenis Penegasan lwn. Penukaran dalam Go

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!