Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menyelesaikan Ralat 'IncompatibleAssign' Apabila Menetapkan Nilai Tersurat kepada Medan Struktur Generik dalam Go?

Bagaimanakah Saya Boleh Menyelesaikan Ralat 'IncompatibleAssign' Apabila Menetapkan Nilai Tersurat kepada Medan Struktur Generik dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-16 00:29:14
asal
402 orang telah melayarinya

How Can I Resolve

Mengendalikan Kekangan Tugasan Jenis dalam Generik

Menetapkan nilai literal kepada medan struct jenis generik boleh membawa kepada ralat "IncompatibleAssign" . Isu ini timbul apabila kekangan jenis termasuk jenis yang tidak tergolong dalam "kumpulan jenis" yang sama seperti integer dan nombor titik terapung.

Dalam konteks khusus ini, pengisytiharan kaedah

func (f *foo[float64]) setValToPi() {
    f.val = 3.14 // IncompatibleAssign: cannot use 3.14 (untyped float constant) as float64 value in assignment
}
Salin selepas log masuk

cuba untuk menetapkan literal titik terapung kepada medan jenis generik foo. Walau bagaimanapun, parameter jenis T adalah terhad kepada ~float32 | ~float64 | ~int, bermakna bahawa tika foo boleh dijadikan instantiated dengan jenis integer.

Untuk memahami sebab ralat ini berlaku, adalah penting untuk mengetahui bahawa pengisytiharan kaedah sahaja tidak menunjukkan jenis generik. Parameter jenis float64 dalam kurungan segi empat sama hanyalah pemegang tempat untuk jenis sebenar yang digunakan untuk membuat instantiat struct foo.

Dalam kaedah tersebut, satu-satunya maklumat tentang jenis val medan ialah ia dihadkan kepada kekangan, tidak semestinya terapung64. Literal titik terapung 3.14 tidak ditaip, bermakna ia tidak boleh ditetapkan dengan selamat kepada semua kemungkinan contoh foo, khususnya yang mempunyai jenis integer.

Untuk menyelesaikan isu ini, satu pendekatan ialah menggunakan parameter generik taip dan bukannya jenis tetap dalam kaedah:

func (f *foo[T]) SetValue(val T) {
    f.val = val
}
Salin selepas log masuk

Ini membolehkan kaedah menerima nilai jenis parameter generik, memastikan keserasian tanpa mengira jenis yang digunakan untuk membuat instantiate foo.

Sebagai alternatif, penyelesaian lain termasuk menggunakan mana-mana/antara muka{} sebagai jenis medan atau meneroka teknik seperti penegasan jenis atau generik dengan jenis antara muka.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyelesaikan Ralat 'IncompatibleAssign' Apabila Menetapkan Nilai Tersurat kepada Medan Struktur Generik 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