Create a basic Finite State Machine
mainTo create a new FSM, use fsm.NewFSM. You must provide an initial state, a list of fsm.Events, and fsm.Callbacks.
An event is defined by:
Name: The name of the event.Src: A slice of strings representing the valid source states.Dst: The destination state.
Use fsm.Current() to retrieve the current state and fsm.Event(ctx, eventName) to trigger a state transition. The Event method requires a context.Context.
package main
import (
"context"
"fmt"
"github.com/looplab/fsm"
)
func main() {
fsm := fsm.NewFSM(
"closed",
fsm.Events{
{Name: "open", Src: []string{"closed"}, Dst: "open"},
{Name: "close", Src: []string{"open"}, Dst: "closed"},
},
fsm.Callbacks{},
)
fmt.Println(fsm.Current())
err := fsm.Event(context.Background(), "open")
if err != nil {
fmt.Println(err)
}
fmt.Println(fsm.Current())
err = fsm.Event(context.Background(), "close")
if err != nil {
fmt.Println(err)
}
fmt.Println(fsm.Current())
}