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
DDDasal
2024-12-16 20:11:14551semak imbas

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{}

Untuk menambah integer pada senarai:

list := AnyList{1}

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

value := list[0].(int)

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
}

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

type GrassEatingAnimal struct {
    Animal
    SuitableFood string
}

Untuk membuat senarai haiwan yang boleh makan rumput:

list := []*GrassEatingAnimal{}

Untuk menambah haiwan ke senarai:

animal := &GrassEatingAnimal{SuitableFood: "Grass"}
list = append(list, animal)

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!

Kenyataan:
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