Stringer — интерфейс из пакета fmt. Если тип реализует String() string, то fmt.Println и друзья используют его для вывода.
type Status int
const (
Active Status = iota
Blocked
)
func (s Status) String() string {
switch s {
case Active:
return "active"
case Blocked:
return "blocked"
default:
return "unknown"
}
}
fmt.Println(Active) // "active" (не "0")
Аналогично есть GoStringer (для %#v) и error (для %s при ошибках).
Совет: для enum-констант можно использовать go generate + stringer:
//go:generate stringer -type=Status
Сгенерирует String() автоматически.