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
Lepaskan: 2024-12-16 06:38:15
asal
792 orang telah melayarinya

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

Anda mungkin menghadapi ralat berikut:

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

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

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!

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