Kaip rašyti bendrą kodą Go kalba?
sobes.tech AI
Atsakymas iš AI
Go kalba pateikiami pagrindiniai bendro kodo rašymo būdai:
-
Sąsajos: Leidžia rašyti funkcijas, kurios veikia su bet kokiais tipais, atitinkančiais tam tikrą metodų rinkinį.
// Sąsajos Reader apibrėžimas type Reader interface { Read(p []byte) (n int, err error) } // Funkcija, veikianti su bet kokiu tipu, įgyvendinančiu Reader func ProcessData(r Reader) error { // Duomenų skaitymas iš Reader return nil } -
Tuščia sąsaja (
interface{}): Universalus tipas, kuris gali būti bet kokia reikšmė. Reikia konvertuoti tipą prieš naudojimą.func PrintAnything(v interface{}) { // Tipų patikrinimas ir konvertavimas if s, ok := v.(string); ok { fmt.Println("Tai eilutė:", s) } else if i, ok := v.(int); ok { fmt.Println("Tai sveikas skaičius:", i) } } -
Geriniai (Generics) / Tipų parametrai (type parameters): Leidžia rašyti funkcijas ir tipus, kurie veikia su įvairiais tipais, nurodytais deklaracijos metu. Pridėta nuo Go 1.18.
// Funkcija, veikianti su bet kokio tipo T elementais func PrintSlice[T any](s []T) { for _, v := range s { fmt.Println(v) } } // Bendras poros tipas su T1 ir T2 parametrais type Pair[T1, T2 any] struct { First T1 Second T2 } -
Refleksija (
reflect): Leidžia tirti ir sąveikauti su tipais ir reikšmėmis vykdymo metu. Dažnai naudojama sudėtingiems scenarijams, bet gali būti mažiau efektyvi ir saugi nei kiti būdai.import "reflect" func GetTypeName(v interface{}) string { return reflect.TypeOf(v).Name() }
Pasirinkimas priklauso nuo konkrečios užduoties ir reikalaujamo lankstumo bei našumo lygio. Geriausias būdas kurti bendrus algoritmus ir duomenų struktūras šiuolaikiniame Go yra generikai. Sąsajos lieka pagrindiniu polimorfizmo ir elgesio apibrėžimo mechanizmu. Tuščia sąsaja ir refleksija naudojami rečiau, dažniausiai specifinėse situacijose.