这里有: ` TestStruct{}` 这里是对结构体的实现,但是声明函数的时候为何是返回`interface {}` 呢?

我看到这一段代码:

type TestStruct struct {
    Field1 string `json,yaml:"field1"`
    Field2 bool   `json,yaml:"field2"`
    Field3 []Foo  `json,yaml:"field3"`
}


第一种 返回interface的方法:
func creator() interface{} {
    return &TestStruct{}
}

第二种 返回interface的方法:
func creator() interface{} {
    return TestStruct{}
}

我有2个问题:
1.
这里有: TestStruct{} 这里是对结构体的实现啊,但是声明函数的时候 为何是返回interface {} 呢?
应该返回的是 TestStruct 实例 才对啊?

2.为何这里两种返回方式有何区别,在得到这个对象之后,使用的时候有形式上的区别吗?

return &TestStruct{}
return TestStruct{}

阅读 1.3k
1 个回答
  1. 因为任何类型都实现了 interface{}, 在你的函数需要返回不同的类型的时候就可以定义函数的返回值为 interface{}; 然后使用 reflect 包对函数的返回值进行处理
  2. "return &TestStruct{}" 返回的是指针类型
    "return TestStruct{}" 返回的是你定义的类型 TestStruct
    都实现了 interface{}, 即可以作为函数的返回值; 他们的差异是由调用方来感知并处理的(reflect)
    参考 https://zhuanlan.zhihu.com/p/...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题