Como trabalhar com Generics no Golang
A implementação de generics em Go foi introduzida na versão 1.18 da linguagem.
Ela é baseada no conceito de “type parameters”. Um type parameter é um tipo de valor especificado no momento da chamada de uma função ou declaração de tipo, sendo usado para definir o comportamento genérico da função ou tipo. O type parameter é especificado entre colchetes após o nome da função ou tipo.
A implementação de generics em Go usa o mecanismo de “type inference” para determinar o tipo de valor apropriado para o type parameter em tempo de compilação. Isso significa que, em muitos casos, o tipo de valor pode ser inferido automaticamente a partir do contexto em que a função ou tipo genérico é usado.
O código de exemplo define uma função genérica para encontrar o índice da primeira ocorrência de um valor em um slice de qualquer tipo que suporta a operação de igualdade. Em seguida, a função é chamada com diferentes tipos de dados para encontrar o índice desejado
package main
import "fmt"
func indexOf[T comparable](arr []T, s T) int {
for i, v := range arr {
if s == v {
return i
}
}
return -1
}
func main() {
n := indexOf([]int64{1, 2, 3, 5, 8, 13}, 8)
fmt.Println("index of int64", n)
s := indexOf([]string{"py", "js", "go", "rs"}, "js")
fmt.Println("index of string", s)
}
Output:
go run ./main.go
index of int64 4
index of string 1
Repo de exemplo: https://github.com/williamkoller/generics-go