如果我有:
type foo struct{ } func bar(baz interface{}) { }
上面是固定的-我不能更改foo或bar。另外,baz必须在bar内转换回foo struct指针。如何将&foo {}强制转换为interface {},以便在调用bar时可以将其用作参数?
要打开*foo到一个interface{}很简单:
*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可以是多种类型则很有用):
baz
func bar(baz interface{}) { switch f := baz.(type) { case *foo: // f is of type *foo default: // f is some other type } }