Interfaces e Genéricos
Interfaces e parâmetros de tipo para APIs flexíveis. Os resultados aparecem na mesma seção de código: comentários // na mesma linha quando curtos, blocos // de várias linhas abaixo da amostra quando não.
Busque em todas as páginas da documentação
Interfaces e parâmetros de tipo para APIs flexíveis. Os resultados aparecem na mesma seção de código: comentários // na mesma linha quando curtos, blocos // de várias linhas abaixo da amostra quando não.
Tipos satisfazem interfaces pelo conjunto de métodos - sem palavra-chave implements.
type Stringer interface{ String() string }
type N int
func (n N) String() string { return fmt.Sprintf("%d", n) }
var s Stringer = N(3)
s.String() // "3"Extrai o tipo concreto de uma interface.
var i any = "hi"
s, ok := i.(string)
s // "hi"
// ok == trueRamifica com base no tipo dinâmico.
var i any = 7
s := ""
switch v := i.(type) {
case int:
s = fmt.Sprintf("int %d", v)
default:
s = "other"
}
s // "int 7"Parâmetros de tipo entre colchetes.
func First[T any](xs []T) (T, bool) {
if len(xs) == 0 {
var z T
return z, false
}
return xs[0], true
}
v, ok := First([]int{9, 8})
v // 9
// ok == trueRestringe com interfaces / comparable.
func Max[T ~int | ~float64](a, b T) T {
if a > b { return a }
return b
}
Max(3, 5) // 5anyany é um alias para interface{}.
var x any = 1
x // 1Uma interface é nil apenas se o tipo e o valor forem nil.
var p *int
var i any = p
i == nil // false (nil tipado)Restrição comparable para chaves de mapa.
func Has[K comparable, V any](m map[K]V, k K) bool {
_, ok := m[k]
return ok
}
Has(map[string]int{"a": 1}, "a") // trueStructs parametrizadas.
type Pair[T any] struct{ A, B T }
Pair[int]{1, 2}.A // 1Métodos podem usar os parâmetros de tipo do tipo receptor.
type Box[T any] struct{ V T }
func (b Box[T]) Get() T { return b.V }
Box[string]{V: "x"}.Get() // "x"Compõe interfaces.
type ReadWriter interface {
io.Reader
io.Writer
}
// tipos que implementam ambos satisfazem ReadWriterAceita interfaces, retorna structs (idioma).
// func Save(s Store) error
// prefira interfaces minúsculas nos pontos de chamada~ inclui tipos subjacentes.
type ID int
func F[T ~int](v T) T { return v }
F(ID(2)) // 2| em conjuntos de tipos de interface.
type Number interface{ ~int | ~float64 }
func Dbl[T Number](v T) T { return v + v }
Dbl(2.5) // 5Verifique o ponteiro antes de colocá-lo em uma interface.
var err error
err == nil // trueVersões da Stack: Go 1.26.x · chi/gin/echo latest (verifique na compilação)
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026