Avatar ·

Cómo implementar correcta e idiomáticamente enumeraciones (enums) en Go?

¡Hola a todos! Soy nuevo en Go, vengo de Java y Python, y no puedo encontrar una respuesta clara a una pregunta simple: ¿cómo hacer enumeraciones (enums) en Go? En Java estoy acostumbrado a escribir: ```java public enum Season { WINTER, SPRING, SUMMER, AUTUMN } ``` En Python uso `Enum` de la biblioteca estándar. Pero en Go solo veo `const` e `iota`, pero eso no es muy lógico — solo números, no hay garantía de que alguien no pase el número 999 en lugar de mi "enum". Necesito implementar un estado de pedido: - New - Processing - Shipped - Delivered - Cancelled Me gustaría que: 1. Hubiera tipado estricto (no se pueda pasar un número arbitrario). 2. Fuera conveniente mostrar el estado como string para logs y usuario. 3. Hubiera una forma de verificar que el valor está dentro del conjunto permitido. ¿Cómo se hace esto correctamente en Go? He oído sobre `iota`, pero no entiendo cómo hacer un enum completo con métodos. Y también — ¿por qué Go no tiene un enum nativo como otros lenguajes? ¿Es un bug o una feature? Por favor, denme