这是一个例子:

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
}

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

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

10-15 17:37