Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menaip Asert Slices Nilai Antara Muka dalam Go?

Bagaimana untuk Menaip Asert Slices Nilai Antara Muka dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-12-07 16:40:13847semak imbas

How to Type Assert Slices of Interface Values in Go?

Taip Menegaskan Slices Nilai Antara Muka

Apabila cuba menaip menegaskan sepotong nilai antara muka, anda mungkin menghadapi ralat yang serupa dengan:

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

Ralat ini berlaku kerana kepingan adalah jenis yang berbeza, bukan antara muka. Untuk memahami sebabnya, mari kita periksa sifat antara muka dalam Go.

Antara muka ialah jenis yang mentakrifkan satu set kaedah yang mesti dilaksanakan oleh sesuatu nilai. Apabila anda mencipta pembolehubah jenis antara muka, jenis dinamiknya tidak tetap, membenarkan ia menyimpan nilai dari mana-mana jenis yang melaksanakan antara muka.

Walau bagaimanapun, hirisan ialah koleksi nilai jenis tertentu, iaitu固定 daripada satu jenis. Ia tidak mempunyai sebarang kaedah, menjadikannya jenis bukan antara muka. Oleh itu, tidak masuk akal untuk mengandaikan bahawa sekeping nilai antara muka juga merupakan antara muka.

Penyelesaian

Untuk menyelesaikan ralat ini, anda boleh menukar nilai dalam kepingan kepada yang dikehendaki secara eksplisit taip, seperti dalam kod berikut:

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

Kod ini mencipta kepingan baharu jenis yang diingini dan berulang melalui kepingan asal, menukar setiap nilai kepada jenis yang dikehendaki. Ini membolehkan anda menggunakan nilai yang ditegaskan jenis dalam kod anda tanpa menghadapi ralat penegasan jenis.

Atas ialah kandungan terperinci Bagaimana untuk Menaip Asert Slices 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