Способы реализации Enum-подобной функциональности в Go (Golang)

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

  1. Использование констант:

    package main
    import "fmt"
    const (
       Sunday    = "Sunday"
       Monday    = "Monday"
       Tuesday   = "Tuesday"
       Wednesday = "Wednesday"
       Thursday  = "Thursday"
       Friday    = "Friday"
       Saturday  = "Saturday"
    )
    func main() {
       day := Sunday
       fmt.Println(day) // Output: Sunday
    }
  2. Использование iota:

    package main
    import "fmt"
    type DayOfWeek int
    const (
       Sunday DayOfWeek = iota
       Monday
       Tuesday
       Wednesday
       Thursday
       Friday
       Saturday
    )
    func main() {
       day := Sunday
       fmt.Println(day) // Output: 0
    }
  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(0)
       fmt.Println(days[day]) // Output: Sunday
    }

Эти примеры демонстрируют различные способы эмуляции перечислений в Go. В первом подходе используются константы, во втором — йота, а в третьем — карта. У каждого подхода есть свои преимущества и недостатки, поэтому вы можете выбрать тот, который лучше всего подходит для вашего конкретного случая использования.