我正在尝试将一个接口动态转换回它的原始结构,但是我在转换后访问结构的属性时遇到了问题 .
以此代码为例 .
package main
import (
"fmt"
"log"
)
type struct1 struct {
A string
B string
}
type struct2 struct {
A string
C string
}
type struct3 struct {
A string
D string
}
func main() {
s1 := struct1{}
s1.A = "A"
structTest(s1)
s2 := struct2{}
s2.A = "A"
structTest(s2)
s3 := struct3{}
s3.A = "A"
structTest(s3)
}
func structTest(val interface{}) {
var typedVal interface{}
switch v := val.(type) {
case struct1:
fmt.Println("val is struct1")
case struct2:
fmt.Println("val is struct2")
case struct3:
fmt.Println("val is struct3")
default:
log.Panic("not sure what val is.")
}
fmt.Println(typedVal.A)
}
我希望能够将3种已知结构类型中的一种传递给我的函数 . 然后找出传入的结构类型以键入断言 . 最后,我希望能够访问类似的属性 .
基本上我想在我的结构中有一些基本的继承,但到目前为止似乎不可能在go中执行此操作 . 我看到一些帖子提到继承使用接口,但我的结构没有方法,所以我不知道如何使用接口 .
这样的事情可能吗?