Care sunt modalitățile de a scrie cod generic în Go?
sobes.tech AI
Răspuns de la AI
În Go, următoarele sunt principalele modalități de a scrie cod generic:
-
Interfețe: Permiteți scrierea de funcții care funcționează cu orice tip care satisface un anumit set de metode.
// Definirea interfeței Reader type Reader interface { Read(p []byte) (n int, err error) } // Funcție care funcționează cu orice tip care implementează Reader func ProcessData(r Reader) error { // citirea datelor din Reader return nil } -
Interfață goală (
interface{}): Tip universal, care poate reprezenta orice valoare. Necesită conversie de tip înainte de utilizare.func PrintAnything(v interface{}) { // Conversie de tip cu verificare if s, ok := v.(string); ok { fmt.Println("Este un șir:", s) } else if i, ok := v.(int); ok { fmt.Println("Este un număr întreg:", i) } } -
Generice / Tipuri parametrizate (type parameters): Permiteți scrierea de funcții și tipuri care funcționează cu seturi arbitrare de tipuri specificate la declarație. Adăugat în Go 1.18.
// Funcție care funcționează cu slice-uri de orice tip T func PrintSlice[T any](s []T) { for _, v := range s { fmt.Println(v) } } // Tip generic Pair cu parametri T1 și T2 type Pair[T1, T2 any] struct { First T1 Second T2 } -
Reflecție (
reflect): Permite explorarea și interacțiunea cu tipurile și valorile în timpul execuției. Este adesea utilizată pentru scenarii complexe, dar poate fi mai puțin eficientă și sigură decât alte abordări.import "reflect" func GetTypeName(v interface{}) string { return reflect.TypeOf(v).Name() }
Alegerea metodei depinde de sarcina specifică și de nivelul de flexibilitate și performanță necesar. Genericele sunt metoda preferată pentru crearea de algoritmi și structuri de date generice în Go modern. Interfețele rămân un mecanism cheie pentru polimorfism și definirea comportamentului. Interfața goală și reflecția sunt utilizate mai rar, pentru cazuri mai specifice.