在下面的代码中:const ( signature uint32 = 0xae3179fb dhkxGroup = 2 ReplySuccessful byte = iota ReplyBufferCorrupted ReplyDecryptFailed ReplySessionExpired ReplyPending)ReplySuccessful编译为 ,而我认为它肯定应该是零。如果我移动并低于 ,则变为 0。2signaturedhkxGroupReplyPendingReplySuccessful这是为什么呢?PS.对我来说,使用iota的唯一“好处”是您可以省略分配给以后常量的值,以便您可以轻松修改/插入新值。但是,如果iota没有固定为零,则可能会导致大问题,尤其是在执行通信协议等操作时。
1 回答
郎朗坤
TA贡献1921条经验 获得超9个赞
该规范定义了iota在Go中的用法(着重号是后加的):
在常量声明中,预声明的标识符 iota 表示连续的非类型化整数常量。它的值是该常量声明中相应 ConstSpec 的索引,从零开始。
请注意,索引是相对于 的,基本上表示当前块。ConstSpec
const
特别令人感兴趣的可能是提供的示例:
const (
a = 1 << iota // a == 1 (iota == 0)
b = 1 << iota // b == 2 (iota == 1)
c = 3 // c == 3 (iota == 2, unused)
d = 1 << iota // d == 8 (iota == 3)
)
请注意,第 3 行(值 2)未使用。您基本上具有相同的,首先是两个未使用的值。
您在代码中可能意味着:
const (
signature uint32 = 0xae3179fb
dhkxGroup = 2
)
const (
ReplySuccessful byte = iota
ReplyBufferCorrupted
ReplyDecryptFailed
ReplySessionExpired
ReplyPending
)
- 1 回答
- 0 关注
- 73 浏览
添加回答
举报
0/150
提交
取消