我有一个别名类型“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 和字符串类型不匹配)
如何在案例中使用定义的常量?
比较中的操作数之一必须可分配给另一个操作数。该类型string不可分配给LogLevel,反之亦然。要获得可比较的值,请将 转换为stringa LogLevel:
switch LogLevel(strings.ToLower(input)) {
Run Code Online (Sandbox Code Playgroud)