一尘不染

将结构指针转换为接口{}

go

如果我有:

   type foo struct{
   }

   func bar(baz interface{}) {
   }

上面是固定的-我不能更改foo或bar。另外,baz必须在bar内转换回foo struct指针。如何将&foo {}强制转换为interface
{},以便在调用bar时可以将其用作参数?


阅读 211

收藏
2020-07-02

共1个答案

一尘不染

要打开*foo到一个interface{}很简单:

f := &foo{}
bar(f) // every type implements interface{}. Nothing special required

为了返回到*foo,您可以执行 类型断言

func bar(baz interface{}) {
    f, ok := baz.(*foo)
    if !ok {
        // baz was not of type *foo. The assertion failed
    }

    // f is of type *foo
}

类型开关
(类似,但baz可以是多种类型则很有用):

func bar(baz interface{}) {
    switch f := baz.(type) {
    case *foo: // f is of type *foo
    default: // f is some other type
    }
}
2020-07-02