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

ken*_*tor 0 go

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

type LogLevel string

const (
    InfoLevel  LogLevel = "info"
    DebugLevel LogLevel = "debug"
    WarnLevel  LogLevel = "warn"
    ErrorLevel LogLevel = "error"
    PanicLevel LogLevel = "panic"
    FatalLevel LogLevel = "fatal"
)
Run Code Online (Sandbox Code Playgroud)

现在我想做一个 switch case 来根据用户输入检查这些常量:

    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)
    }
Run Code Online (Sandbox Code Playgroud)

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

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

如何在案例中使用定义的常量?

Cer*_*món 5

比较中的操作数之一必须可分配给另一个操作数。该类型string不可分配给LogLevel,反之亦然。要获得可比较的值,请将 转换stringa LogLevel

switch LogLevel(strings.ToLower(input)) {
Run Code Online (Sandbox Code Playgroud)

  • @kentor 应用程序定义的常量不会限制“LogLevel”的可能值。 (2认同)