Rumah > pembangunan bahagian belakang > Golang > Mengapa Saya Tidak Boleh Menetapkan Satu Jenis Generik kepada Yang Lain dalam Go, Walaupun Argumen Jenisnya Serasi?

Mengapa Saya Tidak Boleh Menetapkan Satu Jenis Generik kepada Yang Lain dalam Go, Walaupun Argumen Jenisnya Serasi?

DDD
Lepaskan: 2025-01-04 12:30:33
asal
618 orang telah melayarinya

Why Can't I Assign One Generic Type to Another in Go, Even If Their Type Arguments Are Compatible?

Memahami Sekatan Tugasan Jenis Generik

Dalam Go, generik tidak boleh diberikan kepada yang lain walaupun argumen jenisnya boleh disebabkan oleh sifat instantiasi generik.

Jenis Generik dalam Go

Jenis generik membenarkan penggunaan semula kod dengan mentakrifkan templat yang boleh digunakan dengan jenis data yang berbeza. Apabila anda membuat instantiate jenis generik, anda menyediakan hujah jenis konkrit untuk menentukan jenis data khusus yang digunakan.

Sekatan Tugasan

Menetapkan nilai satu jenis generik kepada yang lain boleh tidak selalu dibenarkan. Ini kerana menginstant jenis generik dengan argumen jenis berbeza menghasilkan dua jenis nama yang berbeza.

Contohnya:

type Props[G Generic] struct{}

type Example struct{}

func (Example) ID() string { return "" }

var ExampleProps = Props[Example]{}

func Problem() Props[Generic] {
    return ExampleProps // Compilation error
}
Salin selepas log masuk

Dalam contoh ini, Contoh melaksanakan antara muka Generik. Walau bagaimanapun, Props[Contoh] dan Props[Generik] masih dianggap jenis yang berbeza. Oleh itu, memberikan ExampleProps (yang jenis Props[Contoh]) kepada Problem (yang mengembalikan Props[Generik]) tidak dibenarkan.

Resolution

Jika anda mahu untuk menetapkan nilai antara jenis generik, anda boleh membuat instantiate jenis generik dengan parameter jenis. Contohnya:

func Problem[T Generic](v T) Props[T] {
    return Props[T]{Value: v}
}
Salin selepas log masuk

Dalam kes ini, Masalah mengambil parameter generik T dan menjadikan Props dengan T. Ini membolehkan lebih fleksibiliti dan boleh digunakan dalam situasi di mana hujah jenis memenuhi syarat tertentu.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menetapkan Satu Jenis Generik kepada Yang Lain dalam Go, Walaupun Argumen Jenisnya Serasi?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan