我对 golang 比较陌生,我正在研究的项目有这种模式重复了好几次:
package foo
type Foo interface {
Bar() int
}
type foo struct {
}
func (f *foo) Bar() int {
return 42
}
func New() Foo {
// why?
return Foo(&foo{})
}
如果我用 return &foo{}
替换最后一个函数中的 returns 语句,一切都会像我预期的那样正常工作......如果我理解正确的话,它就是鸭子类型。那么使用 Foo(...) 函数有什么意义呢?当您将内置类型(例如 int)包装在可能具有方法的类型中时,将类型用作函数似乎可以工作。我很好奇作者在这里的意图。如果它包含在语言规范中,我无法找到它。
最佳答案
表达式 Foo(x) 是 conversion 。这里不需要转换,因为 *foo
是 assignable到 Foo
。代码应该写成:
func New() Foo {
return &foo{}
}
关于go - 接口(interface)函数/"cast"在golang中实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41883830/