Rumah > pembangunan bahagian belakang > Golang > Mengapa Penegasan Jenis Gagal dengan Jenis Tersuai dalam Go, Tetapi Penukaran Berjaya?

Mengapa Penegasan Jenis Gagal dengan Jenis Tersuai dalam Go, Tetapi Penukaran Berjaya?

Linda Hamilton
Lepaskan: 2024-11-04 07:14:02
asal
726 orang telah melayarinya

Why Does Type Assertion Fail with Custom Types in Go, But Conversion Succeeds?

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

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:

  • Jenis tersuai seperti Answer pada dasarnya adalah alias untuk jenis sedia ada. Ia tidak menambah keupayaan atau gelagat baharu.
  • Tegasan jenis menyediakan semakan jenis masa jalan, manakala penukaran melakukan paksaan jenis tersirat.
  • Apabila berurusan dengan jenis tersuai yang membalut jenis yang dipratentukan, biasanya disyorkan untuk menggunakan penukaran dan bukannya penegasan jenis, kerana ia lebih cekap dan sentiasa berjaya jika jenis asas sepadan.

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!

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