Structs e interfaces
Go Generics
Write one function or type that works with many types using type parameters.
Lo que aprenderás
- 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.
Puntos clave
- [T Number] limits T to numbers.
- any allows every type.
Stack[string]is a stack of strings.
Ejemplo ejecutable de Go
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 1Practica
Abre el ejemplo en el compilador online, cambia un valor o añade una línea y predice la salida antes de ejecutarlo. Después rompe el código a propósito y lee el mensaje del compilador.
¿Terminaste esta lección?
Márcala como aprendida para seguir tu progreso.
Tu progreso está guardado en este navegador Inicia sesión para conservarlo en todos tus dispositivos.
Practica con un reto
Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.
Todos los retos