字符串类型声明与字符串不具有可比性

时间:2019-05-03 20:15:12

标签: go

我有一个别名类型“ LogLevel”,它是一个字符串:

type LogLevel string

const (
    InfoLevel  LogLevel = "info"
    DebugLevel LogLevel = "debug"
    WarnLevel  LogLevel = "warn"
    ErrorLevel LogLevel = "error"
    PanicLevel LogLevel = "panic"
    FatalLevel LogLevel = "fatal"
)

现在,我想做一个开关箱以对照用户输入检查这些const:

    switch strings.ToLower(input) {
    case "", InfoLevel:
        return zap.NewAtomicLevelAt(zap.InfoLevel)
    default:
        fmt.Errorf("Invalid log level supplied '%s'. Defaulting to info loglevel", input)
        return zap.NewAtomicLevelAt(zap.InfoLevel)
    }

这不起作用,因为显然类型不兼容?

  

在打开string.ToLower(input)时无效的InfoLevel情况(不匹配   类型LogLevel和字符串)

在这种情况下如何使用定义的const?

2 个答案:

答案 0 :(得分:4)

comparison中的一个操作数必须与另一个assignable相同。无法将类型string分配给LogLevel,反之亦然。要获得可比较的值,请将convertstring更改为LogLevel

switch LogLevel(strings.ToLower(input)) {

答案 1 :(得分:3)

type LogLevel string是类型定义。

type LogLevel = string是类型别名。

您似乎想要后者而不是前者。