Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengelakkan Ralat 'IncompatibleAssign' Apabila Menetapkan Nilai kepada Medan Struktur Generik dalam Go?

Bagaimana untuk Mengelakkan Ralat 'IncompatibleAssign' Apabila Menetapkan Nilai kepada Medan Struktur Generik dalam Go?

Linda Hamilton
Lepaskan: 2024-12-21 01:53:09
asal
602 orang telah melayarinya

How to Avoid

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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:

  1. Elakkan menggunakan tidak ditaip literals: Daripada menggunakan literal yang tidak ditaip, isytiharkan nilai jenis tertentu dan tetapkan nilai itu pada medan.
  2. Gunakan kaedah yang menerima parameter jenis: Cipta kaedah yang mengambil nilai jenis parameter jenis sebagai hujah dan menyerahkannya kepada medan.
  3. Gunakan "mana-mana" atau Jenis medan "antara muka{}": Jenis ini boleh menyimpan nilai apa-apa jenis, menawarkan fleksibiliti tetapi mengorbankan keselamatan jenis.

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!

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