Penugasan Nilai Serasi Jenis dalam Struktur Generik
Dalam Go, jenis generik membenarkan penciptaan struktur dengan medan jenis pembolehubah. Walau bagaimanapun, memberikan nilai literal pada medan kadangkala boleh mengakibatkan ralat "IncompatibleAssign".
Pertimbangkan kod ini:
type constraint interface { ~float32 | ~float64 } type foo[T constraint] struct { val T } func (f *foo[float64]) setValToPi() { f.val = 3.14 }
Kod ini menyusun kerana antara muka kekangannya hanya termasuk jenis titik terapung. Walau bagaimanapun, jika kami menambah jenis integer pada kekangan:
type constraint interface { ~float32 | ~float64 | ~int } type foo[T constraint] struct { val T } func (f *foo[float64]) setValToPi() { f.val = 3.14 }
Kami menghadapi ralat "IncompatibleAssign" kerana pemalar apungan yang tidak ditaip tidak boleh diberikan terus kepada medan jenis integer.
Sebab Ralat
Ralat timbul kerana kekangan membenarkan pelbagai jenis dengan kumpulan jenis yang berbeza. Apabila memberikan nilai literal kepada medan jenis generik, pengkompil tidak boleh menentukan jenis medan yang tepat pada masa penyusunan. Menetapkan pemalar apungan yang tidak ditaip boleh membawa kepada menetapkan jenis yang tidak serasi kepada medan jenis integer, mengakibatkan ralat.
Penyelesaian
Untuk menyelesaikan ralat ini, kami mempunyai beberapa pilihan:
Kesimpulan
Oleh memahami sebab di sebalik ralat "IncompatibleAssign", kami boleh menggunakan penyelesaian yang sesuai untuk memastikan keserasian jenis dalam struct generik medan.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat 'IncompatibleAssign' Apabila Menetapkan Nilai kepada Medan Struktur Generik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!