01
前言
开发中,我们经常会遇到这种情况,服务模块有多种状态,它们有一定的顺序,先后执行,逐步切换。这时,fsm这个库可以帮助我们更好的管理多个状态。
fsm库,它主要基于两个FSM实现,增加了golang版本的实现:
Javascript Finite State Machine, https://github.com/jakesgordon/javascript-state-machine
Fysom for Python, https://github.com/oxplot/fysom (forked at https://github.com/mriehl/fysom)
02
简单举例
package main
import (
"fmt"
"github.com/looplab/fsm"
)
func enterState(e *fsm.Event) {
fmt.Printf("event: %s, from:%s to %s\n", e.Event, e.Src, e.Dst)
}
func main() {
f := fsm.NewFSM(
"sleeping",
fsm.Events{
{Name: "eat", Src: []string{"sleeping"}, Dst: "eating"},
{Name: "work", Src: []string{"eating"}, Dst: "working"