我正在使用包log/slog,并希望将给定的字符串解析为有效的slog.Level
。我从以下内容开始
func doSomething() {
levelAsString := "this can be anything"
var level slog.Level
switch levelAsString {
case "Debug":
level = slog.LevelDebug
case "Info":
level = slog.LevelInfo
case "Warn":
level = slog.LevelWarn
case "Error":
level = slog.LevelError
default:
// invalid log level, handle error
}
// valid log level, move on ...
}
找不到“tryParse”函数。你知道如何解析一个给定的字符串吗?我在找一个level, parseError := slog.ParseLevel("this can be anything")
1条答案
按热度按时间lyr7nygr1#
Go不像其他语言那样支持枚举。相反,您可以定义一个新类型,例如
slog.Level
,并将一些值声明为特殊常量,并以类似枚举的方式命名它们(正如slog在这里为您所做的那样),但最终slog.Level
是一个int,slog.LevelDebug
也是如此,7
也是如此。Go会说7是一个有效的slog.Level
,即使没有一个常量变量保存7。您正在定义与将字符串转换为枚举值相关的功能。你可以选择字符串,你可以决定如何响应意外的字符串(假设一个默认值?抛出错误?再次询问用户?),你可以使它区分大小写,如果你认为有一个新的级别是愚蠢的,你可以省略整个级别(不要这样做,但你得到了我希望的重点)。Go没有一个标准化的方法来做这些事情。
如果你正在开发一个库,社区可能会受益于将转换放在一个函数中,并有第二个函数用于转换另一个方向,但我会认真考虑你是否真的需要这个,或者你是否只是让他们跳过铁环来使用你的枚举而不是slog的。很难推荐你应该做什么,因为这是 * 你的 * 代码,它是基于你的目标的主观的。