Sintassi dei parametri di tipo
Funzioni e tipi generici con [T any]
Sintassi dei parametri di tipo è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Contesto sui generics
Prima di Go 1.18, il codice che funzionava con più tipi richiedeva interface{}/any (con perdita della sicurezza dei tipi) oppure la generazione di codice. I generics aggiungono parametri di tipo per il polimorfismo a tempo di compilazione.
Sintassi delle funzioni generiche
Dichiari i parametri di tipo tra parentesi quadre dopo il nome della funzione:
func Map[T, U any](s []T, f func(T) U) []U {
result := make([]U, len(s))
for i, v := range s {
result[i] = f(v)
}
return result
}
nums := Map([]int{1,2,3}, func(n int) string {
return strconv.Itoa(n)
})Inferenza dei tipi
Nella maggior parte dei casi, il compilatore deduce gli argomenti di tipo dagli argomenti della funzione. Può specificarli esplicitamente se l'inferenza non riesce.
// Inferred:
nums := Map([]int{1,2,3}, strconv.Itoa)
// Explicit:
nums := Map[int, string]([]int{1,2,3}, strconv.Itoa)Tipi generici
Anche le struct e gli altri tipi possono avere parametri di tipo:
type Stack[T any] struct {
items []T
}
func (s *Stack[T]) Push(v T) { s.items = append(s.items, v) }
func (s *Stack[T]) Pop() (T, bool) {
if len(s.items) == 0 { var zero T; return zero, false }
n := len(s.items)-1
v := s.items[n]
s.items = s.items[:n]
return v, true
}Più parametri di tipo
Le funzioni e i tipi possono avere più parametri di tipo:
type Pair[K, V any] struct { Key K; Value V }
func Zip[K, V any](keys []K, vals []V) []Pair[K, V] {
result := make([]Pair[K, V], min(len(keys), len(vals)))
for i := range result {
result[i] = Pair[K, V]{keys[i], vals[i]}
}
return result
}Valore zero del parametro di tipo
Dichiari una variabile con il valore zero usando var zero T. È necessario quando si restituisce un risultato "senza valore" da una funzione generica.
func First[T any](s []T) (T, bool) {
if len(s) == 0 { var zero T; return zero, false }
return s[0], true
}Metodi sui tipi generici
I metodi di un tipo generico usano i parametri del tipo, non parametri propri. Un metodo non può introdurre ulteriori parametri di tipo.
type Pair[K, V any] struct{ K K; V V }
func (p Pair[K, V]) Swap() Pair[V, K] { return Pair[V, K]{p.V, p.K} }Istanziazione
L'utilizzo di un tipo generico con un argomento di tipo concreto si chiama istanziazione. Avviene in fase di compilazione, non durante l'esecuzione: non comporta overhead di boxing.
s := Stack[int]{}
s.Push(42)Alias di tipo e tipi generici
È possibile creare alias di tipo per tipi generici istanziati:
type IntStack = Stack[int]Limitazioni
I parametri di tipo non possono essere usati con type switch o type assertion. I metodi sui tipi generici non possono avere parametri di tipo aggiuntivi. I generics non possono essere usati su tipi con operatori sovraccaricati senza vincoli.
Quando usare i generics
Usi i generics per algoritmi realmente indipendenti dal tipo (tipi contenitore, helper funzionali come Map/Filter/Reduce) quando l'alternativa sarebbe duplicare il codice o usare conversioni non sicure.
Verifica rapida
Dove vengono dichiarati i parametri di tipo in una funzione generica?
Riepilogo: sintassi dei parametri di tipo
Punti chiave:
- Parametri di tipo tra parentesi quadre: func Foo[T any](...)
- Funziona con funzioni e tipi (struct e così via)
- Il compilatore deduce gli argomenti di tipo dagli argomenti nella maggior parte dei casi
- Valore zero: var zero T; nessun parametro di tipo a livello di metodo
Domande Frequenti
La lezione «Sintassi dei parametri di tipo» è gratuita?
Sì — il testo completo di «Sintassi dei parametri di tipo» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Sintassi dei parametri di tipo»?
Funzioni e tipi generici con [T any] Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Sintassi dei parametri di tipo»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Sintassi dei parametri di tipo
- Vincoli: comparable e interfacce
- Strutture dati generiche
- Generics nella pratica: insidie