Structs und Interfaces
Go Generics
Write one function or type that works with many types using type parameters.
Das lernst du
- 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.
Das Wichtigste
- [T Number] limits T to numbers.
- any allows every type.
Stack[string]is a stack of strings.
Ausführbares Go-Beispiel
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 1Üben
Öffne das Beispiel im Online-Compiler, ändere einen Wert oder füge eine Zeile hinzu und sage die Ausgabe voraus, bevor du es ausführst. Bring den Code danach absichtlich zum Scheitern und lies die Meldung des Compilers.
Lektion fertig?
Markiere sie als gelernt, um deinen Fortschritt zu verfolgen.
Dein Fortschritt ist in diesem Browser gespeichert Melde dich an, um ihn auf jedem Gerät zu behalten.
Mit einer Challenge üben
Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.
- Min-Stack Baue einen Stack, der nach jedem Push oder Pop sofort sein kleinstes Element meldet. Mittel