2 回答

TA貢獻1852條經(jīng)驗 獲得超7個贊
聲明一段字符串,其中字符串對應(yīng)于常量名稱:
var animalNames = []string{
? ? "Dog",
? ? "Cat",
? ? "Fish",
? ? "Horse",
? ? "Snake",
? ? "Rabbit",
? ? "Lion",
? ? "Rino",
? ? "Hedgehog",
}
要獲取位的名稱,請循環(huán)遍歷名稱。如果設(shè)置了相應(yīng)的位,則將名稱添加到結(jié)果中:
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實用程序創(chuàng)建一個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條經(jīng)驗 獲得超7個贊
使用 iota 創(chuàng)建位掩碼值 Iota 在創(chuàng)建位掩碼時非常有用。例如,為了表示可能是安全的、經(jīng)過身份驗證的和/或就緒的網(wǎng)絡(luò)連接狀態(tài),我們可以創(chuàng)建如下所示的位掩碼:
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 關(guān)注
- 187 瀏覽
添加回答
舉報