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