Koji su načini za pisanje opšteg koda u Go?
sobes.tech АИ
Одговор од АИ
U jeziku Go, sledeći su glavni načini za pisanje generičkog koda:
-
Interfejsi: Omogućavaju pisanje funkcija koje rade sa bilo kojim tipom koji zadovoljava određeni skup metoda.
// Definisanje interfejsa Reader type Reader interface { Read(p []byte) (n int, err error) } // Funkcija koja radi sa bilo kojim tipom koji implementira Reader func ProcessData(r Reader) error { // čitanje podataka iz Reader return nil } -
Prazan interfejs (
interface{}): Univerzalni tip koji može predstavljati bilo koju vrednost. Zahteva konverziju tipa pre korišćenja.func PrintAnything(v interface{}) { // Provera i konverzija tipa if s, ok := v.(string); ok { fmt.Println("Ovo je niz:", s) } else if i, ok := v.(int); ok { fmt.Println("Ovo je ceo broj:", i) } } -
Generici / Tipovi sa parametrima (type parameters): Omogućavaju pisanje funkcija i tipova koji rade sa proizvoljnim skupovima tipova, navedenim pri deklaraciji. Dodato u Go 1.18.
// Funkcija koja radi sa slice-ovima bilo kog tipa T func PrintSlice[T any](s []T) { for _, v := range s { fmt.Println(v) } } // Opšti tip Pair sa parametrima T1 i T2 type Pair[T1, T2 any] struct { First T1 Second T2 } -
Refleksija (
reflect): Omogućava istraživanje i interakciju sa tipovima i vrednostima tokom izvršavanja. Često se koristi za složenije scenarije, ali može biti manje efikasna i sigurnija od drugih pristupa.import "reflect" func GetTypeName(v interface{}) string { return reflect.TypeOf(v).Name() }
Izbor metode zavisi od konkretne zadatka i potrebnog nivoa fleksibilnosti i performansi. Generici su preferirani način za kreiranje opštih algoritama i struktura podataka u savremenom Go. Interfejsi ostaju ključni mehanizam za polimorfizam i definisanje ponašanja. Prazan interfejs i refleksija se ređe koriste, za specifičnije slučajeve.