如何在 Golang 中使用带有可空字符串 (*string) 的 switch case?

这是我的代码:


func ToSomething(arg *string) string {

    switch arg {

    case nil:

        return "something1"

    case "args1":

        return "something2"

    case "args2":

        return "something3"

    default:

        return "something4"

    }

}

它在下方显示一条红线args1,args2上面写着


“arg”开关中的无效大小写“args1”(不匹配类型“string”和“*string”)


有谁知道在 golang 中正确使用带有可为空字符串 (*string) 的 switch case 吗?


这是一个围棋游乐场:https ://go.dev/play/p/0TaeXSEIt06


米脂
浏览 89回答 2
2回答

慕桂英3389331

由于arg是类型*string,您必须*string在case分支中列出值。但!您显然想要匹配指向的string值,因此列出*string值不是您想要的:检查指针是否相等。因此,您不应该使用argasswitch表达式,而应该case像这样在分支上提供合理的条件:func ToSomething(arg *string) string {    switch {    case arg == nil:        return "something1"    case *arg == "args1":        return "something2"    case *arg == "args2":        return "something3"    default:        return "something4"    }}测试它:ptr := func(s string) *string { return &s }fmt.Println(ToSomething(nil))fmt.Println(ToSomething(ptr("args1")))fmt.Println(ToSomething(ptr("args2")))fmt.Println(ToSomething(ptr("xx")))输出(在Go Playground上尝试):something1something2something3something4

手掌心

每个案例的类型必须与 相同arg。在您的示例arg中,*string每个案例都是string。你可以取消引用arg:func ToSomething(arg *string) string {    if arg == nil {        return "something1"    }    switch *arg {    case "args1":        return "something2"    case "args2":        return "something3"    default:        return "something4"    }}这里是操场。
打开App,查看更多内容
随时随地看视频慕课网APP