为了账号安全,请及时绑定邮箱和手机立即绑定

iota的确切含义是什么?

iota的确切含义是什么?

Go
摇曳的蔷薇 2022-09-12 20:21:13
在下面的代码中: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 的索引,从零开始。

请注意,索引是相对于 的,基本上表示当前块。ConstSpecconst

特别令人感兴趣的可能是提供的示例:

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

)


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 73 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信