Cara Bikin Enum di Go
Kalau kamu datang dari bahasa lain (misalnya Java, C#, atau TypeScript), pasti familiar sama yang namanya enum. Enum itu enak banget buat ngebuat sekumpulan nilai bernama yang jelas artinya.
Nah, di Go sayangnya nggak ada enum bawaan. Tapi jangan sedih—dengan sedikit trik, kita tetap bisa bikin sesuatu yang mirip enum pakai konstanta dan tipe kustom.
1. Enum Sederhana dengan const
+ iota
Cara paling dasar: pakai const
dan iota
. iota
itu semacam counter otomatis yang bikin nilai integer berurutan.
package main
import "fmt"
const (
Red = iota
Green
Blue
)
func main() {
fmt.Println("Red:", Red)
fmt.Println("Green:", Green)
fmt.Println("Blue:", Blue)
}
Outputnya bakal:
Red: 0
Green: 1
Blue: 2
Gampang kan? Tapi masih terasa “mentah” karena cuma angka.
2. Tambahin Tipe Kustom Biar Lebih Rapi
Supaya lebih jelas maksudnya, kita bisa bikin tipe kustom, misalnya Color
.
type Color int
const (
Red Color = iota
Green
Blue
)
Sekarang variabel-variabel ini punya konteks lebih jelas: mereka bagian dari tipe Color
, bukan sekadar integer biasa. Ini bikin kode lebih aman dan gampang dipahami.
3. Biar Bisa Dicetak Sebagai String
Masalah dengan enum berbasis integer: kalau diprint, hasilnya cuma angka. Biar lebih manusiawi, kita bisa bikin method String()
.
func (c Color) String() string {
switch c {
case Red:
return "Red"
case Green:
return "Green"
case Blue:
return "Blue"
default:
return "Unknown"
}
}
Sekarang kalau kita print:
fmt.Println(Green)
Outputnya:
Green
Jauh lebih enak dibaca kan?
4. Enum Sebagai Bit Flags
Kadang kita butuh enum yang bisa digabung (misalnya permission: read, write, execute). Triknya: pakai bit flags.
type Flags uint
const (
FlagA Flags = 1 << iota
FlagB
FlagC
FlagD
)
func main() {
flags := FlagA | FlagC
fmt.Println("Has FlagA:", flags&FlagA != 0)
fmt.Println("Has FlagB:", flags&FlagB != 0)
}
Jadi kita bisa simpan banyak status dalam satu variabel.
Ringkasnya
- Go nggak punya enum bawaan, tapi kita bisa bikin sendiri pakai
const
+iota
. - Tambahin tipe kustom biar lebih aman dan jelas.
- Implementasikan
String()
biar enak diprint. - Kalau perlu enum yang bisa digabung, pakai bit flags.
Dengan trik-trik ini, enum di Go tetap bisa powerful dan gampang dipakai.