在将其作为接口传递并运行它的方法之后,让您回到它的数据类型?

时间:2015-07-14 23:33:43

标签: struct go interface

我有一个结构如下

type MyStruct {
   EmbeddedFooBar
}

func (m *MyStruct) Foo(b *http.Request) {
   // Doing something
} 

func fn(args ...interfaces) {
    // It's here I want to get my struct back and run the "Get" method
    // Please keep in mind I am too pass a pointer param into the struct method
    strt := args[0]

    ....
    get struct back to static data type MyStruct
    and run "Get()", dont mind how/where I will get *http.Request to pass, assume I can
    ....

    strt.Get(*http.Request)
}

func main() {
    a := &MyStruct{}
    fn(a)
}

我将上面的结构传递给一个期望fn的可变函数...interfaces{}(因此任何类型都可以满足参数)

在函数fn内部我希望将结构MyStruct返回到它的数据类型和值,并运行它的方法Get,它也可以接受*http.Request之类的接收器

如何从界面arg[0]返回My Struct并运行结构的Get方法,并能够传递指针。

1 个答案:

答案 0 :(得分:1)

你想要的是Type Assertion。解决方案可能是这样的:

func fn(args ...interfaces) {
    if strt, ok := args[0].(*MyStruct); ok {
        // use struct
    } else {
        // something went wrong
    }
    // .......
}