Go语言 如何安全地将字符串解析为slog级别?

bfrts1fy  于 2023-10-14  发布在  Go
关注(0)|答案(1)|浏览(88)

我正在使用包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")

lyr7nygr

lyr7nygr1#

Go不像其他语言那样支持枚举。相反,您可以定义一个新类型,例如slog.Level,并将一些值声明为特殊常量,并以类似枚举的方式命名它们(正如slog在这里为您所做的那样),但最终slog.Level是一个int,slog.LevelDebug也是如此,7也是如此。Go会说7是一个有效的slog.Level,即使没有一个常量变量保存7。
您正在定义与将字符串转换为枚举值相关的功能。你可以选择字符串,你可以决定如何响应意外的字符串(假设一个默认值?抛出错误?再次询问用户?),你可以使它区分大小写,如果你认为有一个新的级别是愚蠢的,你可以省略整个级别(不要这样做,但你得到了我希望的重点)。Go没有一个标准化的方法来做这些事情。
如果你正在开发一个库,社区可能会受益于将转换放在一个函数中,并有第二个函数用于转换另一个方向,但我会认真考虑你是否真的需要这个,或者你是否只是让他们跳过铁环来使用你的枚举而不是slog的。很难推荐你应该做什么,因为这是 * 你的 * 代码,它是基于你的目标的主观的。

相关问题