Sobes.tech
Middle+

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.