在以下守则中:
const (
signature uint32 = 0xae3179fb
dhkxGroup = 2
ReplySuccessful byte = iota
ReplyBufferCorrupted
ReplyDecryptFailed
ReplySessionExpired
ReplyPending
)ReplySuccessful被编译成2,而我认为它应该是0。如果我将signature和dhkxGroup移动到ReplyPending下面,那么ReplySuccessful就变成0。
为什么会这样呢?
PS。对我来说,使用iota的唯一“好处”是可以省略分配给以后的常量的值,这样就可以轻松地修改/插入新的值。然而,如果iota不是固定的为零,它可能会导致大问题,特别是在做像通信协议这样的事情。
发布于 2021-07-12 10:16:50
等级库在Go中定义了iota的用法(重点是添加的):
在常量声明中,预先声明的标识符iota表示连续的非类型整数常量。的值是该常量声明中相应的 ConstSpec 的索引,从零开始。
注意,索引相对于ConstSpec,基本上意味着当前的const块。
特别令人感兴趣的可能是提供的例子:
(a=1 << iota // a == 1 (iota == 0) b=1 << iota // b == 2 (iota == 1) c=3/c == 3 (iota == 2,未使用)d=1 << iota // d == 8 (iota == 3)
注意,第3行(iota值2)未使用。基本上相同,两个未使用的值放在第一位。
您可能在代码中的意思是:
const (
signature uint32 = 0xae3179fb
dhkxGroup = 2
)
const (
ReplySuccessful byte = iota
ReplyBufferCorrupted
ReplyDecryptFailed
ReplySessionExpired
ReplyPending
)看吧,在操场上
https://stackoverflow.com/questions/68345567
复制相似问题