🐢
Golangのenum魔法
Better safe enum type in Golang
JavaのEnums
今回 Enums
について話したいと思います。
Enums
は特別なクラスでオブジェクトにパラメターつけたら制限になっています。
Javaには、こんな書き方です
public enum Vehicle {
CAR, BICYCLE, MOTORBIKE
}
使い時に
public Transport {
private Vehicle vehicle;
public Transport(Vehicle vehicle) {
this.vehicle = vehicle;
}
}
そうするとTransport
クラスに Vehicle
enum を渡さないといけないです。
GolangのEnumsは。。。
Golangだったら iota
やこんな書き方をします
type Vehicle string
const (
Car Vehicle = "car"
Bicycle Vehicle = "bicycle"
Motorbike Vehicle = "motorbike"
)
Javaと似てますし、String()
メソッドも書けます。
func (v Vehicle) String() string {
return string(v)
}
だが、タイプは Vehicle
じゃなくて別のタイプになってコンパイラーが怒られないです。
func validateVehicle(vehicle Vehicle) bool {
switch vehicle {
case "car", "bicycle", "motorbike":
return true
default:
return false
}
}
func main() {
fmt.Println(validateVehicle(Bicycle)) // OK
fmt.Println(validateVehicle("boat")) // NO OK boatがVehicleじゃないです
}
少し変更しましょう
type vehicle string
type Vehicle interface {
__private()
}
func (v vehicle) __private(){}
これ追加したらコンパイラーが怒られます!
やったぜ~!
Happy coding!
参考
Discussion