golang 自定义类型不能使用nil_使用GoLang实现自定义状态机

ba1c247a99da7f6cacae21ea15d938a7.png

微信公众号:[double12gzh]

关注容器技术、关注Kubernetes。问题或建议,请公众号留言。

1. 背景

在计算机领域中,状态机是一个比较基础的概念。在我们的日常生活中,我们可以看到许多状态机的例子,如:交通信息号灯、电梯、自动售货机等。

基于FSM的编程也是一个强大的工具,可以对复杂的状态转换进行建模,它可以大大简化我们的程序。

2. 什么是状态机

有限状态机(FSM)或简称状态机,是一种计算的数学模型。它是一个抽象的机器,在任何时间都可以处于有限的状态之一。FSM可以根据一些输入从一个状 态变为另一个状态;从一个状态到另一个状态的变化称为转换。

一个FSM由三个关键要素组成:初始状态所有可能状态的列表触发状态转换的输入

下面我们以旋转门作为FSM建模的一个简单例子(来自Wikipedia)

ba1c247a99da7f6cacae21ea15d938a7.png

和其他FSM一样,转门的状态机有三个元素:

•它的初始状态是 "锁定"•它有两种可能的状态。"锁定 "和 "解锁"•两个输入将触发状态变化。"推 "和 "硬币"

3. 实现状态机

接下来,我将建立一个模拟旋转门行为的命令行程序。当程序启动时,它会提示用户输入一些命令,然后它将根据输入的命令改变其状态。

3.1 版本1 简单直接

package mainimport (    "bufio"    "fmt"    "log"    "os"    "strings")// 旋转门状态type State uint32const (    Locked State = iota    Unlocked)// 相关的命令const (    CmdCoin = "coin"    CmdPush = "push")func main() {
        state := Locked    reader := bufio.NewRe
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值