繁体   English   中英

iota 的确切含义是什么?

[英]What's the exact meaning of iota?

在下面的代码中:

const (
    signature uint32 = 0xae3179fb
    dhkxGroup = 2

    ReplySuccessful byte = iota
    ReplyBufferCorrupted
    ReplyDecryptFailed
    ReplySessionExpired
    ReplyPending
)

ReplySuccessful被编译成2 ,而我认为它应该definitly为零 如果我移动signaturedhkxGroup下面ReplyPending ,然后ReplySuccessful变为0。

为什么是这样?

附注。 对我来说,使用 iota 的唯一“好处”是您可以省略分配给后续常量的值,以便您可以轻松修改/插入新值。 但是,如果 iota 没有固定为零,它可能会导致大问题,尤其是在执行诸如通信协议之类的事情时。

规范定义了 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 行(iota 值 2)未使用。 您基本上是相同的,首先是两个未使用的值。

您在代码中的意思可能是:

const (
    signature uint32 = 0xae3179fb
    dhkxGroup = 2
)

const (
    ReplySuccessful byte = iota
    ReplyBufferCorrupted
    ReplyDecryptFailed
    ReplySessionExpired
    ReplyPending
)

在操场上看到它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM