Объявите фрагмент строк, где строки соответствуют именам констант:
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
}