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 iota para 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

  1. Declaramos type Status int para criar um tipo distinto baseado em int.
  2. No bloco const, a primeira constante Pendente recebe iota, que vale 0.
  3. As constantes seguintes (EmAndamento, Concluido, Cancelado) herdam a expressão iota, que incrementa automaticamente a cada linha.
  4. No main, usamos fmt.Printf com %d para 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 ) faria EmAndamento ser do tipo int não tipado, não Status. Corrija com Pendente Status = iota.
  • Usar iota fora de um bloco const: isso não compila; iota só existe dentro de declarações const.
  • Imprimir com %s em vez de %d: como Status não implementa String(), a saída seria %!s(int=0). Use %d ou implemente String().

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