在下面的代碼中: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 關注
- 113 瀏覽
添加回答
舉報
0/150
提交
取消