我需要将未知立即类型的接口(interface)转换为已知的基本类型。
例子
package main
import (
"fmt"
"reflect"
)
type A struct {
foo string
}
type B A
func main() {
bS := B{foo: "foo"}
bI := reflect.ValueOf(bS).Interface()
fmt.Println(bI)
aS := bI.(A)
fmt.Println(aS)
}
当这段代码运行时,可以理解的是,它会出现 panic 并显示以下消息
panic: interface conversion: interface {} is main.B, not main.A
在这个例子中:
- 类型B对于接收接口(interface)bI的代码是未知的
- B型是 保证是已知类型 A 的别名。
编辑:我不能在这里使用类型别名,因为这意味着类型 B 将成为编写类型 A 的另一种方式,因此我将丢失我定义的所有自定义方法B型。
最佳答案
您可以使用类型别名
(在 Go1.9 中发布)来解决这个问题。
package main
import (
"fmt"
"reflect"
)
type A struct {
foo string
}
type B = A
func main() {
bS := B{foo: "foo"}
bI := reflect.ValueOf(bS).Interface()
fmt.Println(bI)
aS := bI.(A)
fmt.Println(aS)
}
注意type B = A
是为了让转换起作用。
关于go - 如何将结构转换为基本类型,而不是 Go 中的直接类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52462441/