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.
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!