go - 如何在 Go 中获取一个类型的所有常量

标签 go fsm

这是一个例子:

package main

type State int

const (
    Created State = iota
    Modified
    Deleted
)

func main() {
    // Some code here where I need the list
    // of all available constants of this type.
}

此用例是创建有限状态机 (FSM)。能够获取所有常量将帮助我编写测试用例,以确保每个新值在 FSM 映射中都有对应的条目。

最佳答案

如果你的常量都是有序的,你可以这样使用:

type T int

const (
    TA T = iota
    TB
    TC
    NumT
)

func AllTs() []T {
    ts := make([]T, NumT)
    for i := 0; i < int(NumT); i++ {
        ts[i] = T(i)
    }
    return ts
}

您还可以将输出缓存在例如初始化()。这只有在所有常量都按顺序用 iota 初始化时才有效。如果您需要适用于所有情况的东西,请使用显式 slice 。

关于go - 如何在 Go 中获取一个类型的所有常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45888678/

相关文章:

git - 通过代理进行go-git克隆

python - 将正则表达式转换为有限状态机

c - 如何用 C 实现分层并发有限状态机 (HCFSM)?

regex - 正则表达式转换为状态机的简短示例?

node.js - 为什么所有这些新语言都有自己的网络服务器?

interface - Go:工厂返回指针和接口(interface){}类型

Goroutine 执行几秒后停止

json - 在 JSON 对象中发送数组时出错

regex - 将有限状态机转换为正则表达式

python - 如何将参数传递给 `transitions` 库中的 on_enter 回调?