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 关注
- 88 浏览
添加回答
举报