ot;afterEvent, current state:%s, Dst:%s \n", d.FSM.Current(), e.Dst)
}
func main() {
door := NewDoor("测试")
fmt.Printf("fsm current state: %s \n", door.FSM.Current())
err := door.FSM.Event(context.Background(), "open")
if err != nil {
fmt.Println(err)
}
fmt.Printf("fsm current state: %s \n", door.FSM.Current())
err = door.FSM.Event(context.Background(), "close")
if err != nil {
fmt.Println(err)
}
fmt.Printf("fsm current state: %s \n", door.FSM.Current())
}
执行结果:大家重点看current state
何时发生的变化。
fsm current state: closed
beforeOpen, current state:closed, Dst:open
beforeEvent, current state:closed, Dst:open
leaveClosed, current state:closed, Dst:open
leaveState, current state:closed, Dst:open
enterOpen, current state:open, Dst:open
enterState, current state:open, Dst:open
afterOpen, current state:open, Dst:open
afterEvent, current state:open, Dst:open
fsm current state: open
beforeEvent, current state:open, Dst:closed
leaveState, current state:open, Dst:closed
enterState, current state:closed, Dst:closed
afterEvent, current state:closed, Dst:closed
fsm current state: closed
参考资料:
looplab/fsm 源码阅读
有限状态机FSM
深入浅出理解有限状态机
有限状态机