我对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{}
替换最后一个函数中的return语句,一切正常,正如我预期的那样......如果我理解正确的话,它会打字。那么使用Foo(...)函数有什么意义呢?当你在一个可能有方法的类型中包装内置类型(如int)时,使用类型作为函数似乎是有效的。我对这位作者的意图很好奇。如果它已在语言规范中涵盖,我无法找到它。
答案 0 :(得分:3)
表达式Foo(x)是conversion。此处不需要转换,因为*foo
与Foo
为assignable。代码应写为:
func New() Foo {
return &foo{}
}