fsm - skynocover/Wiki-for-GoLang GitHub Wiki
fsm
finite-state machine
有限狀態機
looplab/fsm
"github.com/looplab/fsm"
func main() {
this := fsm.NewFSM(
"pending", //初始值
fsm.Events{
{Name:"Start",Src:[]string{"pending","End"}, Dst:"Mission"},
{Name:"Play",Src:[]string{"Mission","Play"}, Dst:"Play"},
{Name:"Support",Src:[]string{"Mission","Play"}, Dst:"End"},
//{Name:"Yellow",Src:[]string{"Bule","Red"}, Dst:"Yellow"},
},
fsm.Callbacks{ //成功設置後執行
"enter_state": func(e *fsm.Event) {
fmt.Println("this event is:"+e.Event)
fmt.Println("this src is:"+e.Src)
fmt.Println("this des is:"+e.Dst)
},
},
)
err := this.Event("Start")
if err != nil {
fmt.Println("first------")
fmt.Println(err)
}
if err:=this.Event("Play");err!= nil {
fmt.Println("Second------")
fmt.Println(err)
}
if err:=this.Event("Play");err!= nil {
fmt.Println("Third------")
fmt.Println(err)
}
if err:=this.Event("Support");err!= nil {
fmt.Println("Forth------")
fmt.Println(err)
}
if err:=this.Event("Start");err!= nil {
fmt.Println("Fifth------")
fmt.Println(err)
}
}
/*
this event is:Start
this src is:pending
this des is:Mission
this event is:Play
this src is:Mission
this des is:Play
Third------
no transition
this event is:Support
this src is:Play
this des is:End
this event is:Start
this src is:End
this des is:Missione
*/