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
*/