Que meios de programação genérica existem?
sobes.tech IA
Resposta da IA
No Golang, existem os seguintes meios de programação genérica (genéricos):
-
Tipos parametrizados: Permitem criar estruturas, interfaces e funções que podem trabalhar com diferentes tipos de dados sem especificá-los rigidamente na fase de compilação. Os tipos de dados são indicados entre colchetes após o nome do tipo ou função.
// Exemplo de estrutura com tipo parametrizado type Stack[T any] struct { elements []T } // Exemplo de função com tipos parametrizados func Map[T, U any](collection []T, f func(T) U) []U { result := make([]U, len(collection)) for i, item := range collection { result[i] = f(item) } return result } -
Restrições de tipos (Type Constraints): Definem um conjunto de tipos que podem ser utilizados como parâmetros genéricos. Permitem limitar a universalidade dos tipos e garantir a segurança das operações.
- Interfaces: Qualquer interface por si só é uma restrição de tipo.
- Interfaces combinadas: Permitem combinar vários tipos ou interfaces usando o operador
|.
// Exemplo de restrição de tipo usando uma interface combinada type Number interface { int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | uintptr | float32 | float64 | complex64 | complex128 } // Função que usa a restrição de tipo func Add[T Number](a, b T) T { return a + b }
Estas ferramentas foram adicionadas no Go 1.18. Antes disso, para implementar algo semelhante a genéricos, usava-se interfaces (interface{}) e reflexão, o que reduzia a segurança de tipos e o desempenho.