diff --git a/go/01-basics/10-enums.go b/go/01-basics/10-enums.go new file mode 100644 index 0000000..feeb598 --- /dev/null +++ b/go/01-basics/10-enums.go @@ -0,0 +1,45 @@ +package main + +import "fmt" + +type ServerState int + +const ( + StateIdle ServerState = iota + StateConnected + StateError + StateRetrying +) + +var stateName = map[ServerState]string{ + StateIdle: "idle", + StateConnected: "connected", + StateError: "error", + StateRetrying: "retrying", +} + +func (ss ServerState) String() string { + return stateName[ss] +} + +func main() { + ns := transition(StateIdle) + fmt.Println(ns) + + ns2 := transition(ns) + fmt.Println(ns2) +} + +func transition(s ServerState) ServerState { + switch s { + case StateIdle: + return StateConnected + case StateConnected, StateRetrying: + + return StateIdle + case StateError: + return StateError + default: + panic(fmt.Errorf("unknown state: %s", s)) + } +}