1、FSM简介
1.1 有限状态机的定义
有限状态机(Finite State Machine,FSM)是一种数学模型,用于描述系统在不同状态下的行为和转移条件。
状态(State)、事件(Event)、动作(Action)
State(S) , Event(E) -> Actions (A), State(S’)
Event(事件)
State(状态)
Action(动作)
FSM 通常用于编程中,用于实现状态转移和控制流程。
注意:
在任何时刻,FSM 只能处于一种状态。
1.2 Go中的FSM
通过上面关于有限状态机的定义,我们大概知道了状态机是个什么东西,那么Golang中是怎么实现的呢。不用慌,已经有大佬实现好了,只管用就好了。
安装:
github.com/looplab/fsm
2、github.com/looplab/fsm 如何使用
注意:
NewFSMgithub.com/looplab/fsm@v1.0.1
2.1 fsm 基础使用
这里把官方的例子改了下,感觉官方的例子不是很清晰。代码如下:
执行结果:
fsm current state: closed
The door's name:测试 , current state:open
fsm current state: open
The door's name:测试 , current state:closed
fsm current state: closed
EventSrc,Event -> Dst,d.enterStateEventStateSrc->DstAction
2.2 fsm 中 Action 何时执行
d.enterState(e)NewFSM
d.enterState(e)called after entering all states
2.2.1 完整版书写的Callbacks执行顺序
Callbacks
2.2.2 简写版的Callbacks执行顺序
2.2.3 注意事项
Callbacks
2.3 较为完整的例子
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