Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Penegasan Jenis Gagal Tetapi Penukaran Berfungsi dengan Jenis Tersuai dalam Go?

Mengapa Penegasan Jenis Gagal Tetapi Penukaran Berfungsi dengan Jenis Tersuai dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-11-04 08:41:30872semak imbas

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

Penegasan dan Penukaran Jenis Dinamakan dalam Go

Pertimbangkan senario berikut di mana jenis tersuai ditakrifkan untuk mentakrifkan semula jenis yang telah ditetapkan:

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

Sekarang, mari cuba gunakan jenis tersuai ini dalam fungsi yang menerima jenis asal yang telah ditetapkan:

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

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

    // Type assertion fails
    acceptMe(ans.(string)) 
    // Conversion works
    acceptMe(string(ans))
}</code>

Jenis penegasan ans.(rentetan) gagal dengan ralat : penegasan jenis tidak sah: ans.(rentetan) (jawapan bukan antara muka di sebelah kiri). Sebaliknya, rentetan penukaran (ans) berjaya. Tingkah laku ini menimbulkan persoalan:

Mengapa penegasan jenis gagal, tetapi penukaran berfungsi?

Untuk memahami perkara ini, mari kita jelaskan bahawa penegasan jenis hanya berfungsi untuk antara muka. Antara muka boleh mempunyai jenis asas yang sewenang-wenangnya, menjadikan penegasan jenis dan suis jenis penting. Penegasan jenis mengembalikan nilai boolean bersama-sama dengan hasilnya, menunjukkan kejayaan penegasan.

Sebaliknya, Jawapan jenis tersuai anda mempunyai jenis asas yang tetap, iaitu rentetan. Memandangkan anda sudah mengetahui jenis yang tepat, anda tidak memerlukan penegasan jenis kerana penukaran daripada Jawapan kepada rentetan akan sentiasa berjaya. Sintaks untuk penukaran ini ialah rentetan(ans).

Atas ialah kandungan terperinci Mengapa Penegasan Jenis Gagal Tetapi Penukaran Berfungsi dengan 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