Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Melaksanakan Senarai Generik dan Bekas Khusus Jenis dalam Go Without Generics?

Bagaimanakah Saya Boleh Melaksanakan Senarai Generik dan Bekas Khusus Jenis dalam Go Without Generics?

DDD
Lepaskan: 2024-12-16 20:11:14
asal
556 orang telah melayarinya

How Can I Implement Generic Lists and Type-Specific Containers in Go Without Generics?

Sebarang Jenis dan Melaksanakan Senarai Generik dalam Go

Dalam pengaturcaraan Go, kekurangan generik boleh menimbulkan cabaran apabila melibatkan pelaksanaan struktur data . Mari kita atasi dua isu biasa:

1. Melaksanakan Senarai Generik

Go tidak menyokong generik secara langsung, tetapi ia menyediakan jenis antara muka{} untuk mewakili sebarang nilai. Antara muka ini boleh digunakan untuk mencipta struktur data "generik" yang boleh menyimpan nilai apa-apa jenis.

Walau bagaimanapun, menggunakan antara muka{} mempunyai kelemahannya, kerana anda perlu menaip secara manual menegaskan nilai semasa mengaksesnya. Contohnya, kod berikut mentakrifkan senarai antara muka{}:

type AnyList []interface{}
Salin selepas log masuk

Untuk menambah integer pada senarai:

list := AnyList{1}
Salin selepas log masuk

Untuk mendapatkan semula integer, anda mesti menaip assert it kembali kepada jenis asalnya:

value := list[0].(int)
Salin selepas log masuk

2. Mencipta Bekas dengan Medan Jenis Tertentu

Dalam Go, tiada setara langsung dengan jenis data algebra seperti List a dalam Haskell atau val List[Animal { type SuitableFood = Grass} ] dalam Scala. Walau bagaimanapun, anda boleh menggunakan gabungan antara muka dan pembenaman untuk mencapai hasil yang serupa.

Sebagai contoh, anda boleh mentakrifkan antara muka untuk haiwan:

type Animal interface {
    GetSuitableFood() string
}
Salin selepas log masuk

Anda kemudiannya boleh menentukan struct untuk haiwan yang mempunyai medan "SuitableFood" jenis rentetan:

type GrassEatingAnimal struct {
    Animal
    SuitableFood string
}
Salin selepas log masuk

Untuk membuat senarai haiwan yang boleh makan rumput:

list := []*GrassEatingAnimal{}
Salin selepas log masuk

Untuk menambah haiwan ke senarai:

animal := &GrassEatingAnimal{SuitableFood: "Grass"}
list = append(list, animal)
Salin selepas log masuk

Pendekatan ini menyediakan cara untuk mencipta bekas dengan medan jenis tertentu, walaupun dengan usaha manual yang lebih berbanding dengan bahasa dengan generik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Senarai Generik dan Bekas Khusus Jenis dalam Go Without Generics?. 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