說(shuō)明:
- 適用于少于32個(gè)狀態(tài)值枚舉值的多狀態(tài)值存儲(chǔ)
- 狀態(tài)值設(shè)定為2的指數(shù)次值梯捕,如[1,2,4,8,16,32,64....]
代碼:
type MySys uint32
func (m *MySys) Add(num uint32) {
m.checkNUm(num)
*m |= MySys(num)
}
func (m *MySys) Sub(num uint32) {
m.checkNUm(num)
tmp := *m
if tmp|MySys(num) == tmp {
*m ^= MySys(num)
}
}
func (m *MySys) List() (list []uint32){
tmp , pow := *m , 0
for tmp > 0{
if tmp&1 == 1{
list = append(list,1<<pow)
}
tmp>>=1
pow++
}
return
}
func (m *MySys) checkNUm(num uint32) {
if bits.OnesCount32(num) > 1 {
panic("Only Support One Byte")
}
}
使用示例:
func main(){
var sys models.MySys
sys.Add(1)
sys.Add(2)
sys.Add(4)
sys.Add(8)
fmt.Println("設(shè)置后的狀態(tài)值為:",sys)
sys.Sub(8)
sys.Sub(1)
fmt.Println("刪除后的狀態(tài)值為:",sys)
fmt.Println("狀態(tài)值列表為:",sys.List())
}
代碼截圖: