Por que Go não tem um tipo de dados embutido "conjunto" (Set) e como implementá-lo?
Olá a todos! Sou um desenvolvedor Go iniciante, vindo do Python, e me deparei com um problema inesperado.
Em Python, eu usava constantemente `set()` para verificar a unicidade de elementos, remover duplicatas de listas e fazer verificações rápidas de pertinência. Por exemplo:
```python
my_list = [1, 2, 2, 3, 3, 4]
unique = set(my_list) # {1, 2, 3, 4}
if 3 in unique: # verificação O(1)
print("Encontrado!")
```
Quando comecei a programar em Go, esperava encontrar algo similar na biblioteca padrão, mas, para minha surpresa, não há nem um tipo `Set` nem generics (até a versão 1.18). Tive que escrever gambiarras:
```go
// Tentativa 1: usar map
seen := make(map[int]bool)
items := []int{1, 2, 2, 3, 3, 4}
for _, v := range items {
seen[v] = true
}
// Mas isso é inconveniente - precisa verificar ok, é verboso
```
Eu entendo que é possível emular um conjunto com `map[T]struct{}`, mas isso parece um hack. Por que os desenvolvedores de Go decidiram não adicionar um tipo `Set` separado na biblioteca padrão? Existe alguma