界面功能是什么/"演员"实际上是在golang吗?

时间:2017-01-26 22:06:27

标签: go

我对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)时,使用类型作为函数似乎是有效的。我对这位作者的意图很好奇。如果它已在语言规范中涵盖,我无法找到它。

1 个答案:

答案 0 :(得分:3)

表达式Foo(x)是conversion。此处不需要转换,因为*fooFooassignable。代码应写为:

func New() Foo {
  return &foo{}
}