golang 枚举 使用示例

28次阅读
没有评论

共计 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
正文完
 0
Eric chan
版权声明:本站原创文章,由 Eric chan 于2024-03-22发表,共计915字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。