Rumah >pembangunan bahagian belakang >Golang >Apakah Perbezaan Antara Penegasan Jenis dan Penukaran untuk Jenis Tersuai dalam Go?

Apakah Perbezaan Antara Penegasan Jenis dan Penukaran untuk Jenis Tersuai dalam Go?

DDD
DDDasal
2024-11-06 10:32:02963semak imbas

What's the Difference Between Type Assertions and Conversions for Custom Types in Go?

Memahami Perbezaan Antara Penegasan Jenis Dinamakan dan Penukaran dalam Go

Apabila bekerja dengan jenis tersuai dalam Go, adalah penting untuk memahami nuansa antara penegasan jenis dinamakan dan penukaran. Mari kita teroka konsep dengan contoh.

Pertimbangkan coretan kod di bawah, di mana kami mentakrifkan jenis tersuai Jawapan yang mentakrifkan semula jenis rentetan yang dipratentukan:

<code class="go">type Answer string</code>

Kami kemudian cuba menggunakan Jawapan dalam fungsi yang menjangkakan jenis rentetan:

<code class="go">func acceptMe(str string) {
    fmt.Println(str)
}

func main() {
    type Answer string
    var ans Answer = "hello"

    // Assertion fails: cannot use ans (type Answer) as type string in function argument
    acceptMe(ans)

    // Type assertion fails as well: invalid type assertion: ans.(string) (non-interface type Answer on left)
    acceptMe(ans.(string))

    // Conversion succeeds.
    acceptMe(string(ans))
}</code>

Mengapa Penegasan Gagal?

Jenis penegasan hanya terpakai pada antara muka. Antara muka membenarkan jenis asas berubah-ubah. Untuk menentukan jenis sebenar, Go menggunakan penegasan jenis (x.(T)) atau suis taip (suis x := x.(jenis)). Penegasan mengembalikan nilai boolean yang menunjukkan jika penegasan itu berjaya.

Dalam kes kami, Jawapan ialah jenis bernama dengan jenis asas tetap (rentetan). Memandangkan jenis asas diketahui, tidak ada keperluan untuk penegasan. Menukar jenis Jawapan kepada rentetan menggunakan rentetan(ans) sudah memadai.

Atas ialah kandungan terperinci Apakah Perbezaan Antara Penegasan Jenis dan Penukaran untuk Jenis Tersuai dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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