我试图代表一个简化的染色体,该染色体由N个碱基组成,每个碱基只能是的一个{A, C, T, G}
。
我想用一个枚举形式化约束,但是我想知道在Go语言中最惯用的枚举方式是什么。
引用语言规范:Iota
在常量声明中,预声明的标识符iota表示连续的无类型整数常量。每当保留字const出现在源中时,它将重置为0,并在每个ConstSpec之后递增。它可以用来构造一组相关的常量:
const ( // iota is reset to 0
c0 = iota // c0 == 0
c1 = iota // c1 == 1
c2 = iota // c2 == 2
)
const (
a = 1 << iota // a == 1 (iota has been reset)
b = 1 << iota // b == 2
c = 1 << iota // c == 4
)
const (
u = iota * 42 // u == 0 (untyped integer constant)
v float64 = iota * 42 // v == 42.0 (float64 constant)
w = iota * 42 // w == 84 (untyped integer constant)
)
const x = iota // x == 0 (iota has been reset)
const y = iota // y == 0 (iota has been reset)
在ExpressionList中,每个iota的值都是相同的,因为它仅在每个ConstSpec之后才增加:
const (
bit0, mask0 = 1 << iota, 1<<iota - 1 // bit0 == 1, mask0 == 0
bit1, mask1 // bit1 == 2, mask1 == 1
_, _ // skips iota == 2
bit3, mask3 // bit3 == 8, mask3 == 7
)
最后一个示例利用了最后一个非空表达式列表的隐式重复。
所以你的代码可能像
const (
A = iota
C
T
G
)
要么
type Base int
const (
A Base = iota
C
T
G
)
如果您希望基数是与int分开的类型。
我试图表示一个简化的染色体,它由N个碱基组成,每个碱基只能是中的一个。 我想用枚举形式化约束,但我想知道在Go中模拟枚举的最惯用的方式是什么。
如果我有枚举: 什么是更自然的方式去得到它的字符串?
问题内容: 我有一些用于处理YAML配置文件的代码,该文件有点失控,带有类型断言,我觉得必须有更好的方法来做到这一点。 这是我的配置文件中的相关代码段: 这是我的解析代码: 该代码按预期工作,但是这里有很多类型断言,我无法撼动自己缺少更好的方法的感觉。 正如配置所暗示的那样,可能要注意的一个关键项目是Caddy风格的插件系统的配置,因此主配置解析器无法提前知道插件配置的外观。它必须将对配置文件的插
问题内容: 我正在尝试使用Go枚举Windows注册表中的值列表,但遇到了一些麻烦。我尝试了两种方法:使用Go提供的库进行调用,以及使用lxn的Windows API包装器 。在两种情况下,我都遇到相同的问题。这是我正在使用的代码(当前正在使用来自lxn的win库): 在这种情况下,始终返回代码87,MSDN唯一的解释是“参数不正确”。 有没有人有任何想法可以为此指出正确的方向? 问题答案: Go
问题内容: 我需要验证结构值是否正确,这意味着我需要单独检查每个字段,这对于少量的小型结构来说很容易,但是我想知道是否有更好的方法。这就是我现在的做法。 这是验证结构中字段值的惯用方式吗?看起来很麻烦。 问题答案: 我认为没有其他方法可以快速完成此操作。但是我找到了一个可以帮助您的go软件包:https : //github.com/go- validator/validator README文件
问题内容: 所以,我看着这个“枚举”类型,并且它种好像一个华而不实的 数组 / / 给我。到底有什么用? 问题答案: 枚举是一种固定数量的常量,至少可以用于两件事 不变 这比创建一堆整数常量要好得多。 创建一个单例 您可以使用枚举来做一些有趣的事情,请看这里 也请看官方文档