Skip to content

Enum

Go'da tilida enum (enumeratsiya) tushunchasi alohida enum tipi sifatida mavjud emas, lekin iota yordamida enumlarni oson yaratish mumkin.

iota nima?

Go'da iota maxsus identifikator bo'lib, u o'zgarmaslar guruhi ichida avtomatik ravishda ketma-ket qiymatlarni yaratish uchun ishlatiladi. U odatda enum yaratishda ishlatiladi.

iota ga misol

package main

import "fmt"

const (
    A = iota // 0
    B        // 1
    C        // 2
    D        // 3
)

func main() {
    fmt.Println(A, B, C, D)
}

Natija:

0, 1, 2, 3

iota qoidalar:

  • iota faqat const blokida ishlaydi.
  • iota har bir yangi const blokida 0 dan boshlanadi.
  • Agar qiymat berilmasa, u avtomatik ravishda oldingi ifodani qaytaradi.

Yana bir misol

package main

import "fmt"

type Status int

const (
    Pending Status = iota // 0
    Processing            // 1
    Completed             // 2
    Failed                // 3
)

func main() {
    fmt.Println(Pending, Processing, Completed, Failed)
}

Natija:

0, 1, 2, 3

Enumni String ko'rinishida chiqarish

package main

import "fmt"

type Status int

const (
    Pending Status = iota
    Processing
    Completed
    Failed
)

func (s Status) String() string {
    switch s {
    case Pending:
        return "Pending"
    case Processing:
        return "Processing"
    case Completed:
        return "Completed"
    case Failed:
        return "Failed"
    default:
        return "Unknown"
    }
}

func main() {
    fmt.Println(Pending)
    fmt.Println(Completed)
}

Enumga maxsus qiymatlar berish

package main

import "fmt"

const (
    Admin    = iota + 1 // 1
    Moderator          // 2
    User               // 3
    Guest   = 100      // 100
    Unknown            // 100
)

func main() {
    fmt.Println(Admin, Moderator, User, Guest, Unknown)
}

Natija:

1 2 3 100 100

Yuqoridagi misol qanday ishladi?

  • Admin = iota + 1 → 0 + 1 = 1
  • Moderator → 1 + 1 = 2 (oldingi iota qiymati 1 bo'lgani uchun)
  • User → 2 + 1 = 3
  • Guest = 100 → iota bu yerda ishlamaydi, qo'lda 100 berildi.
  • Unknown → Bu yerda Go avtomatik ravishda oldingi satrning qiymatini (100) takrorlaydi. Lekin iota ishlamaydi, chunki oldingi satr (Guest) iota asosida emas, qo'lda berilgan qiymat asosida ishlaydi.