gpt4 book ai didi

Golang 类型切换需要(冗余)类型断言

转载 作者:行者123 更新时间:2023-12-01 22:45:58 29 4
gpt4 key购买 nike

我想使用type switch调用特定于类型的解析函数

https://play.golang.org/p/2xj_owLL4ZK

package main

import (
"fmt"
)

func main() {
var value interface{}
value = "I am a string"

switch v := value.(type) {
case string:
parseString(value)
default:
fmt.Printf("I don't know about type %T!\n", v)

}
}

func parseString(s string) {
fmt.Println(s)
}

但是这不会编译,因为它缺少 type assertion :

cannot use value (type interface {}) as type string in argument to parseString: need type assertion

添加类型断言修复了错误。

https://play.golang.org/p/p0nYNEEJb0Z

package main

import (
"fmt"
)

func main() {
var value interface{}
value = "I am a string"

switch v := value.(type) {
case string:
s, ok := value.(string)
if ok {
parseString(s)
}
default:
fmt.Printf("I don't know about type %T!\n", v)
}
}

func parseString(s string) {
fmt.Println(s)
}

但这感觉是多余的。我现在检查两次,该值是否是字符串。

我应该在类型开关和类型断言之间进行选择吗?也许有一种不太冗余的方法来做到这一点?这个例子是人为的。可能有多种类型,这就是为什么类型开关看起来像是干净的解决方案......直到我开始添加类型断言。

更新

此问题已收到多次否决票。我认为这忽略了 Go 类型开关的令人困惑的本质,它看起来(最初)好像被打开的值是类型,而不是

switch v := value.(type) {
case string:
// ...
case int:
// ...
}

我是 Go 新手,错误地假设 v是那种类型。如果我第一次编写 Go 时遇到这个问题,其他人也可能遇到这个问题吗?

最佳答案

使用您在开关中声明的值:

   switch v := value.(type) {
case string:
// v is string here
parseString(v)
...

关于Golang 类型切换需要(冗余)类型断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63511525/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com