Jaké jsou způsoby psaní obecných kódů v Go?
sobes.tech AI
Odpověď od AI
V jazyce Go jsou hlavní způsoby psaní obecného kódu následující:
-
Rozhraní: Umožňují psát funkce, které pracují s jakýmkoli typem splňujícím určitý soubor metod.
// Definice rozhraní Reader type Reader interface { Read(p []byte) (n int, err error) } // Funkce, která pracuje s jakýmkoli typem implementujícím rozhraní Reader func ProcessData(r Reader) error { // čtení dat z Reader return nil } -
Prázdné rozhraní (
interface{}): Univerzální typ, který může reprezentovat jakoukoli hodnotu. Vyžaduje přetypování před použitím.func PrintAnything(v interface{}) { // Přetypování s kontrolou if s, ok := v.(string); ok { fmt.Println("Toto je řetězec:", s) } else if i, ok := v.(int); ok { fmt.Println("Toto je celé číslo:", i) } } -
Generika / parametrizované typy (type parameters): Umožňují psát funkce a typy, které pracují s libovolnými sadami typů, specifikovanými při deklaraci. Přidáno v Go 1.18.
// Funkce, která pracuje s řezem (slice) libovolného typu T func PrintSlice[T any](s []T) { for _, v := range s { fmt.Println(v) } } // Obecný typ Pair s parametry T1 a T2 type Pair[T1, T2 any] struct { First T1 Second T2 } -
Reflexe (
reflect): Umožňuje zkoumat a interagovat s typy a hodnotami za běhu. Často se používá pro složitější scénáře, ale může být méně výkonná a bezpečnější než jiné přístupy.import "reflect" func GetTypeName(v interface{}) string { return reflect.TypeOf(v).Name() }
Volba metody závisí na konkrétním úkolu a požadované úrovni flexibility a výkonu. Generika jsou preferovaným způsobem pro vytváření obecných algoritmů a datových struktur v moderním jazyce Go. Rozhraní zůstávají klíčovým mechanismem pro polymorfismus a definování chování. Prázdné rozhraní a reflexe jsou méně často používány, pro specifičtější případy.