Fácil Go
Enum de Status com iota
Enunciado
Crie um tipo Status (int) e use iota para definir constantes: Pendente, EmAndamento, Concluido e Cancelado. Em seguida, no main, imprima o valor numérico de cada status.
Requisitos
- Definir
type Status int. - Usar
iotapara atribuir valores sequenciais a partir de 0. - Imprimir cada constante com seu valor numérico.
Código inicial
package main
import "fmt"
// TODO: defina o tipo Status e as constantes com iota
func main() {
// TODO: imprima os status
}
Saída esperada
Pendente: 0
EmAndamento: 1
Concluido: 2
Cancelado: 3
Ver dica
Use const ( Pendente Status = iota; EmAndamento; ... ) dentro de um bloco const.
Mostrar solução
package main
import "fmt"
type Status int
const (
Pendente Status = iota // 0
EmAndamento // 1
Concluido // 2
Cancelado // 3
)
func main() {
fmt.Printf("Pendente: %d\n", Pendente)
fmt.Printf("EmAndamento: %d\n", EmAndamento)
fmt.Printf("Concluido: %d\n", Concluido)
fmt.Printf("Cancelado: %d\n", Cancelado)
}
Passo a passo
- Declaramos
type Status intpara criar um tipo distinto baseado emint. - No bloco
const, a primeira constantePendenterecebeiota, que vale 0. - As constantes seguintes (
EmAndamento,Concluido,Cancelado) herdam a expressãoiota, que incrementa automaticamente a cada linha. - No
main, usamosfmt.Printfcom%dpara imprimir o valor numérico de cada constante.
Por que funciona
O iota é reiniciado a cada bloco const e incrementa a cada linha de especificação. Ao associá-lo a um tipo personalizado, criamos um enum idiomático em Go, onde cada constante tem um valor inteiro distinto e sequencial.
Erros comuns
- Esquecer de declarar o tipo na primeira constante:
const ( Pendente = iota; EmAndamento )fariaEmAndamentoser do tipointnão tipado, nãoStatus. Corrija comPendente Status = iota. - Usar
iotafora de um blococonst: isso não compila;iotasó existe dentro de declaraçõesconst. - Imprimir com
%sem vez de%d: comoStatusnão implementaString(), a saída seria%!s(int=0). Use%dou implementeString().
Outra forma de resolver
Se quiser uma representação textual, implemente o método String():
func (s Status) String() string {
return [...]string{"Pendente", "EmAndamento", "Concluido", "Cancelado"}[s]
}
Saída esperada
Pendente: 0
EmAndamento: 1
Concluido: 2
Cancelado: 3