我有一个别名类型“ 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?
答案 0 :(得分:4)
comparison中的一个操作数必须与另一个assignable相同。无法将类型string
分配给LogLevel
,反之亦然。要获得可比较的值,请将convert的string
更改为LogLevel
:
switch LogLevel(strings.ToLower(input)) {
答案 1 :(得分:3)
type LogLevel string
是类型定义。
type LogLevel = string
是类型别名。
您似乎想要后者而不是前者。