Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Melaksanakan Senarai Generik dan Bekas Khusus Jenis dalam 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!