共计 915 个字符,预计需要花费 3 分钟才能阅读完成。
package main
import (
"fmt"
)
// 定义枚举类型 NicFlag
type NicFlag uint
// 枚举常量定义
const (
FlagUp NicFlag = 1 << iota // FlagUp=1
FlagBroadcast // FlagBroadcast=2
FlagLoopback // FlagLoopback=4
FlagPointToPoint // FlagPointToPoint=8
FlagMulticast // FlagMulticast=16
)
// 提供一个全局字典,用于存储枚举名称与枚举值之间的对应关系
var flagNames = map[NicFlag]string{
FlagUp: "up",
FlagBroadcast: "broadcast",
FlagLoopback: "loopback",
// ... 其他枚举值的映射
FlagPointToPoint: "pointtopoint",
FlagMulticast: "multicast",
}
// 实现NicFlag类型的String()方法
func (f NicFlag) String() string {
s, ok := flagNames[f]
if ok {
return s
}
return "unknown"
}
// 示例:使用或操作符组合枚举值
func main() {
flag := FlagUp | FlagBroadcast | FlagLoopback
fmt.Println(flag.String()) // 输出:up,broadcast,loopback
}
// 如果需要输出枚举值以逗号分隔的列表形式,可自定义String()方法
func (f NicFlag) commaSeparatedString() string {
var flags []string
for k, v := range flagNames {
if f&k != 0 { // 检查当前枚举值是否设置了该标志位
flags = append(flags, v)
}
}
return strings.Join(flags, ", ")
}
// 现在可以这样调用:
fmt.Println(flag.commaSeparatedString()) // 输出:up, broadcast, loopback
正文完