Structs et interfaces
Go Generics
Write one function or type that works with many types using type parameters.
Ce que vous allez apprendre
- Type parameters
- Constraints
- Generic types
Sum[T Number]
Sum([]int{1, 2, 3})6Sum([]float64{1.5, 2.5})4One definition, many types
Generics let you write code once and use it with different types. A type parameter such as T, written in square brackets, stands for a type that is chosen where the code is used.
Number is a constraint: Sum accepts any type built on int or float64. Map has two type parameters, so it can turn a slice of one type into a slice of another. Stack[T] is a generic type, and Stack[string] is a stack of strings.
Points clés
- [T Number] limits T to numbers.
- any allows every type.
Stack[string]is a stack of strings.
Exemple Go exécutable
main.go
package main
import (
"fmt"
"strings"
)
type Number interface {
~int | ~float64
}
func Sum[T Number](values []T) T {
var total T
for _, value := range values {
total += value
}
return total
}
func Map[T, U any](items []T, convert func(T) U) []U {
result := make([]U, 0, len(items))
for _, item := range items {
result = append(result, convert(item))
}
return result
}
type Stack[T any] struct {
items []T
}
func (s *Stack[T]) Push(item T) { s.items = append(s.items, item) }
func (s *Stack[T]) Pop() (T, bool) {
var zero T
if len(s.items) == 0 {
return zero, false
}
last := s.items[len(s.items)-1]
s.items = s.items[:len(s.items)-1]
return last, true
}
func main() {
fmt.Println(Sum([]int{1, 2, 3}), Sum([]float64{1.5, 2.5}))
fmt.Println(Map([]int{1, 2, 3}, func(n int) string { return strings.Repeat("*", n) }))
stack := &Stack[string]{}
stack.Push("a")
stack.Push("b")
top, _ := stack.Pop()
fmt.Println(top, len(stack.items))
}
6 4
[* ** ***]
b 1S'entraîner
Ouvrez l'exemple dans le compilateur en ligne, modifiez une valeur ou ajoutez une ligne, et devinez la sortie avant de l'exécuter. Cassez ensuite le code exprès et lisez le message du compilateur.
Leçon terminée ?
Marquez-la comme apprise pour suivre votre progression.
Votre progression est enregistrée dans ce navigateur Connectez-vous pour la garder sur tous vos appareils.
S'entraîner avec un défi
Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.
Tous les défis