我需要将未知立即类型的接口转换为已知基本类型。
示例
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: interface conversion: interface {} is main.B, not main.A
在此示例中:
编辑:我不能在此处使用类型别名,因为这意味着类型B将成为写类型A的另一种方式,因此我将失去在上定义的所有自定义方法B型。
答案 0 :(得分:0)
您可以使用type aliasing
(在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
的目的是使演员表能够正常工作。
答案 1 :(得分:0)
我知道转到第一个结构的唯一方法是aS := A(bI.(B))
反转过程。希望对您有帮助