给出以下代码片段:
type foo struct {} func bar(baz interface{}) {}
其中 foo 和 bar 在设计上都是不可变的,如何将 &foo{} 结构体指针转换为 interface{} 值,然后将其用作 bar 的参数函数?
将结构体指针转换为interface{}值很简单:
f := &foo{} bar(f) // Every type implements interface{}, so no special action is required.
从interface{}值恢复原始的*foo指针需要类型断言或类型开关。
类型断言:
func bar(baz interface{}) { f, ok := baz.(*foo) if !ok { // The assertion failed because baz was not of type *foo. } // f is of type *foo. }
类型切换:
func bar(baz interface{}) { switch f := baz.(type) { case *foo: // f is of type *foo. default: // f is some other type. } }
以上是如何在 Go 中将结构体指针转换为 interface{} 值?的详细内容。更多信息请关注PHP中文网其他相关文章!