我正在尝试将一个接口动态转换回它的原始结构,但是我在转换后访问结构的属性时遇到了问题 .

以此代码为例 .

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中执行此操作 . 我看到一些帖子提到继承使用接口,但我的结构没有方法,所以我不知道如何使用接口 .

这样的事情可能吗?