Enum в Golang: несколько способов реализации перечислений в Go

enum не является встроенным типом данных в Go (Golang), но вы можете добиться аналогичной функциональности, используя набор констант или собственные типы. Вот несколько распространенных методов реализации перечислений в Go:

Метод 1: использование констант

package main
import "fmt"
const (
    Sunday    = 0
    Monday    = 1
    Tuesday   = 2
    Wednesday = 3
    Thursday  = 4
    Friday    = 5
    Saturday  = 6
)
func main() {
    day := Tuesday
    fmt.Println(day) // Output: 2
}

Метод 2: использование iota и пользовательских типов

package main
import "fmt"
type DayOfWeek int
const (
    Sunday DayOfWeek = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
)
func main() {
    day := Tuesday
    fmt.Println(day) // Output: 2
}

Метод 3. Использование карты

package main
import "fmt"
type DayOfWeek int
var days = map[DayOfWeek]string{
    0: "Sunday",
    1: "Monday",
    2: "Tuesday",
    3: "Wednesday",
    4: "Thursday",
    5: "Friday",
    6: "Saturday",
}
func main() {
    day := DayOfWeek(2)
    fmt.Println(days[day]) // Output: Tuesday
}

Метод 4. Использование фрагмента

package main
import "fmt"
type DayOfWeek int
var days = []string{
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
}
func main() {
    day := DayOfWeek(2)
    fmt.Println(days[day]) // Output: Tuesday
}