Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menaip Dengan Betul Menegaskan Secebis Nilai Antara Muka dalam Go?

Bagaimanakah Saya Boleh Menaip Dengan Betul Menegaskan Secebis Nilai Antara Muka dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-12-16 06:38:15841semak imbas

How Can I Correctly Type Assert a Slice of Interface Values in Go?

Taip Menegaskan Secebis Nilai Antara Muka

Dalam pengaturcaraan, adalah perkara biasa untuk menghadapi situasi di mana anda perlu menaip menegaskan sepotong nilai antara muka. Walau bagaimanapun, ini kadangkala boleh membawa kepada kesilapan. Mari kita selidiki sebab mengapa penegasan sekeping nilai antara muka mungkin tidak selalu boleh dilaksanakan.

Apabila cuba menaip assert kepada jenis tertentu, seperti []Simbol, daripada secebis nilai antara muka, []Nod , seperti dalam contoh yang disediakan:

args.([]Symbol)

Anda mungkin menghadapi ralat berikut:

invalid type assertion: args.([]Symbol) (non-interface type []Node on left)

Ini ralat timbul kerana kepingan, seperti []Node, bukan jenis antara muka, tidak seperti Node itu sendiri. Sesuatu keping mempunyai jenis tersendiri dengan set tingkah laku dan kaedahnya sendiri. Oleh itu, ia tidak mempunyai kecairan dan kebolehsuaian antara muka, yang membolehkan jenis asas berubah secara dinamik.

Walaupun kelihatan mudah untuk menganggap sepotong nilai antara muka sebagai antara muka, ia secara asasnya melanggar konsep menaip . Dalam contoh di atas, niatnya adalah untuk menukar kepingan args menjadi kepingan nilai Simbol. Walau bagaimanapun, memandangkan args ialah sekeping nilai Nod, penegasan jenis mudah tidak boleh dilakukan.

Untuk mengendalikan situasi ini dengan betul, anda boleh menggunakan pendekatan alternatif:

symbols := make([]Symbol, len(args))
for i, arg := range args { symbols[i] = arg.(Symbol) }

Kod ini mencipta kepingan baharu nilai Simbol, simbol dan lelaran di atas kepingan args, menukar setiap elemen kepada Simbol menggunakan penegasan jenis. Penukaran manual ini memastikan setiap elemen dalam kepingan yang terhasil mematuhi jenis yang diingini, memberikan kefungsian yang diingini tanpa memerlukan penegasan jenis yang tidak sah.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menaip Dengan Betul Menegaskan Secebis Nilai Antara Muka 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