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:
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:
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:
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.