Memahami "antara muka tanpa kaedah" dalam Go
Dalam kod anda, anda mengalami ralat "jenis antara muka {} ialah antara muka tanpa kaedah" apabila cuba mengakses medan daripada struct tanpa nama yang dihantar ke fungsi. Untuk memahami ralat ini, adalah penting untuk memahami konsep antara muka dalam Go.
Antara muka dalam Go ialah jenis yang mentakrifkan satu set kaedah yang mesti dilaksanakan oleh jenis konkrit. Walau bagaimanapun, dalam kes anda, antara muka yang anda gunakan ialah "antara muka kosong" yang dilambangkan dengan antara muka {}. Antara muka kosong tidak mempunyai sebarang kaedah dan boleh menyimpan nilai apa-apa jenis, menjadikannya jenis universal.
Akses Medan Struktur Tanpa Nama
Untuk mengakses medan struct tanpa nama diserahkan kepada NewJob, anda perlu menaip menegaskannya kepada jenis yang serasi sebelum anda boleh mengakses medannya. Penegasan jenis membolehkan anda menukar antara muka kosong kepada jenis konkrit tertentu.
Kod Dibetulkan
<code class="go">id := v.(struct{Id int}).Id</code>
Dalam kod yang diperbetulkan ini, kami menaip menegaskan antara muka v kepada struct dengan medan Id. Ini membolehkan kami mengakses medan Id dan program akan berjalan seperti yang diharapkan.
Ingat bahawa penegasan jenis harus digunakan dengan bijak kerana ia boleh membawa kepada ralat masa jalan jika penegasan jenis gagal.
Atas ialah kandungan terperinci Mengapa saya mendapat \'antara muka tanpa kaedah\' apabila mengakses struct tanpa nama dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!