Avatar ·

Como implementar enumerações (enums) de forma correta e idiomática em Go?

Olá a todos! Sou novo em Go, vim do Java e Python, e não consigo encontrar uma resposta clara para uma pergunta simples: como fazer enumerações (enums) em Go? Em Java, estou acostumado a escrever: ```java public enum Season { WINTER, SPRING, SUMMER, AUTUMN } ``` Em Python, uso `Enum` da biblioteca padrão. Já em Go, vejo apenas `const` e `iota`, mas isso não parece lógico — são apenas números, sem garantia de que alguém não passe o número 999 no lugar do meu "enum". Preciso implementar um status de pedido: - New - Processing - Shipped - Delivered - Cancelled Gostaria que: 1. Houvesse tipagem estrita (não fosse possível passar um número arbitrário). 2. Fosse conveniente exibir o status como string para logs e para o usuário. 3. Houvesse a possibilidade de verificar se o valor está dentro do conjunto permitido. Como isso é feito corretamente em Go? Ouvi falar sobre `iota`, mas não entendo como criar um enum completo com métodos. E também — por que Go não tem um enum nativo como outras linguagens? Isso é um bug ou uma feature? Por favor, forneça