Rumah > pembangunan bahagian belakang > Golang > Mengapa Jenis Generik Go dengan Jenis Berbeza Argumen Tidak Boleh Ditugaskan kepada Satu Sama Lain?

Mengapa Jenis Generik Go dengan Jenis Berbeza Argumen Tidak Boleh Ditugaskan kepada Satu Sama Lain?

Linda Hamilton
Lepaskan: 2024-12-19 11:22:09
asal
586 orang telah melayarinya

Why Can't Go's Generic Types with Different Type Arguments Be Assigned to Each Other?

Mengapa Kejadian Generik Jenis Yang Sama Tidak Boleh Ditugaskan kepada Satu Sama Lain?

Go melarang memberikan contoh jenis generik dengan jenis yang berbeza argumen antara satu sama lain, walaupun jenis argumen memenuhi hubungan antara muka. Untuk menggambarkan ini, pertimbangkan kod berikut:

type Generic interface {
    ID() string
}

type Props[G Generic] struct{}

type Example struct {
    id string
}

func (example Example) ID() string {
    return example.id
}

var ExampleProps = Props[Example]{}

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

Melaksanakan kod ini mengakibatkan ralat penyusunan:

cannot use ExampleProps (variable of type Props[Example]) as Props[Generic] value in return statement
Salin selepas log masuk

Ralat ini timbul kerana membuat instantiation jenis generik dengan argumen jenis baharu menghasilkan jenis yang berbeza. Khususnya:

  • Props[Contoh] ialah satu jenis bernama dan
  • Props[Generik] ialah jenis lain bernama.

Dua jenis ini bukan boleh ditukar ganti, walaupun pada hakikatnya Contoh melaksanakan Generik. Oleh itu, memberikan ContohProps (contoh Props[Contoh]) kepada Props[Generik] adalah tidak sah.

Tingkah laku ini meliputi generik yang digunakan dengan mana-mana. mana-mana hanyalah jenis statik alias antara muka kosong: antara muka{}. Ia tidak bersamaan dengan "mana-mana jenis" atau T. Oleh itu, jenis yang diwujudkan dengan mana-mana tidak boleh diserahkan kepada jenis yang digunakan dengan jenis tertentu yang lain.

Untuk menyelesaikan isu ini, anda boleh membuat seketika Props dengan parameter jenis , memastikan bahawa kedua-dua jenis input dan output fungsi adalah konsisten. Contohnya:

type Props[G Generic] struct{ Value G }

func Problem[T Generic](v T) Props[T] {
    return Props[T]{ Value: v }
}

func main() {
    a := Problem(Example{})
    fmt.Println(a)
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Jenis Generik Go dengan Jenis Berbeza Argumen Tidak Boleh Ditugaskan kepada Satu Sama Lain?. 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