亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

Go
米脂 2022-11-23 15:31:00
這是我的代碼: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
查看完整描述

2 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

由于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上嘗試):


something1

something2

something3

something4


查看完整回答
反對 回復 2022-11-23
?
手掌心

TA貢獻1942條經驗 獲得超3個贊

每個案例的類型必須與 相同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"

    }

}

這里是操場。


查看完整回答
反對 回復 2022-11-23
  • 2 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號