2 回答

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

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"
}
}
這里是操場。
- 2 回答
- 0 關注
- 152 瀏覽
添加回答
舉報