2 回答
TA贡献1852条经验 获得超7个赞
声明一段字符串,其中字符串对应于常量名称:
var animalNames = []string{
"Dog",
"Cat",
"Fish",
"Horse",
"Snake",
"Rabbit",
"Lion",
"Rino",
"Hedgehog",
}
要获取位的名称,请循环遍历名称。如果设置了相应的位,则将名称添加到结果中:
func Names(k Key) []string {
var result []string
for i := 0; i < len(animalNames); i++ {
if k&(1<<uint(i)) != 0 {
result = append(result, animalNames[i])
}
}
return result
}
如果将常量更改为位索引而不是位值,则可以使用stringer实用程序创建一个func (k Key) String() string
. 这是此更改的代码:
type Key uint
const (
Dog Key = iota
Cat
Fish
Horse
Snake
Rabbit
Lion
Rino
Hedgehog
)
//go:generate stringer -type=Key
func Names(k Key) []string {
var result []string
for animal := Dog; animal <= Hedgehog; animal++ {
if k&(1<<animal) != 0 {
result = append(result, animal.String())
}
}
return result
}
TA贡献1936条经验 获得超6个赞
使用 iota 创建位掩码值 Iota 在创建位掩码时非常有用。例如,为了表示可能是安全的、经过身份验证的和/或就绪的网络连接状态,我们可以创建如下所示的位掩码:
package main
import "fmt"
const (
Secure = 1 << iota // 0b001
Authn // 0b010
Ready // 0b100
)
// 0b011: Connection is secure and authenticated, but not yet Ready
func main() {
ConnState := Secure | Authn
fmt.Printf(` Secure: 0x%x (0b%03b)
Authn: 0x%x (0b%03b)
ConnState: 0x%x (0b%03b)
`, Secure, Secure, Authn, Authn, ConnState, ConnState)
}
- 2 回答
- 0 关注
- 130 浏览
添加回答
举报