具有以下功能:
const (
Flag1 = 0
Flag2 = uint64(1) << iota
Flag3
Flag4
Flag5
)
有没有一种更短/更好的方法,我想把它们都做一遍:
const FlagAll = Flag1 | Flag2 | Flag3 | Flag4 | Flag5
具有以下功能:
const (
Flag1 = 0
Flag2 = uint64(1) << iota
Flag3
Flag4
Flag5
)
有没有一种更短/更好的方法,我想把它们都做一遍:
const FlagAll = Flag1 | Flag2 | Flag3 | Flag4 | Flag5
因为您的所有标志都包含一个1位,所以将位向左移动,FlagAll
将是该行中的下一个位,但减go 1:
const (
Flag1 = 0
Flag2 = uint64(1) << iota
Flag3
Flag4
Flag5
FlagAll = uint64(1)<<iota - 1
)
测试:
fmt.Printf("%08b\n", Flag1)
fmt.Printf("%08b\n", Flag2)
fmt.Printf("%08b\n", Flag3)
fmt.Printf("%08b\n", Flag4)
fmt.Printf("%08b\n", Flag5)
fmt.Printf("%08b\n", FlagAll)
这将输出(在Go Playground上试用):
00000000
00000010
00000100
00001000
00010000
00011111
请注意,如果将最后一个常量左移并减go 1,则得到相同的值:
const FlagAll2 = Flag5<<1 - 1
但这需要显式包括最后一个常量(Flag5
),而第一个解决方案不需要它(您可以添加更多标志,如Flag6
、Flag7
...和FlagAll
将是正确的值,而不更改它).