gpt4 book ai didi

go - iota 的确切含义是什么?

转载 作者:行者123 更新时间:2023-12-04 12:32:06 31 4
gpt4 key购买 nike

在下面的代码中:

const (
signature uint32 = 0xae3179fb
dhkxGroup = 2

ReplySuccessful byte = iota
ReplyBufferCorrupted
ReplyDecryptFailed
ReplySessionExpired
ReplyPending
)
ReplySuccessful编译为 2 ,而我认为它绝对应该是 .如果我搬家 signaturedhkxGroup下面 ReplyPending ,然后 ReplySuccessful变为 0。
为什么是这样?
附注。对我来说,使用 iota 的唯一“好处”是您可以省略分配给后续常量的值,以便您可以轻松修改/插入新值。但是,如果 iota 不是 固定 为零,它可能会导致大问题,尤其是在执行诸如通信协议(protocol)之类的事情时。

最佳答案

spec定义 iota 在 Go 中的用法(强调):

Within a constant declaration, the predeclared identifier iota represents successive untyped integer constants. Its value is the index of the respective ConstSpec in that constant declaration, starting at zero.


请注意,该索引是相对于 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 行(iota 值 2)未使用。您基本上是相同的,首先是两个未使用的值。
您在代码中的意思可能是:
const (
signature uint32 = 0xae3179fb
dhkxGroup = 2
)

const (
ReplySuccessful byte = iota
ReplyBufferCorrupted
ReplyDecryptFailed
ReplySessionExpired
ReplyPending
)
看到它 on the playground

关于go - iota 的确切含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68345567/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com