【发布时间】:2017-11-04 21:45:25
【问题描述】:
我是 golang 的初学者,正在尝试接口。我想将接口保存在单独的包中,以便我可以使用它在各种其他包中实现它,也将它提供给其他团队(.a 文件),以便他们可以实现自定义插件。请参阅下面的示例了解我想要实现的目标。
--- Folder structure ---
gitlab.com/myproject/
interfaces/
shaper.go
shapes/
rectangle.go
circle.go
---- shaper.go ---
package interfaces
type Shaper interface{
Area() int
}
如何确保 rectangle.go 实现 shaper 接口? 我知道 go 隐式实现了接口,这是否意味着 rectangle.go 会自动实现 shaper.go,即使它在不同的包中?
我像下面这样尝试过,但是当我运行 gofmt 工具时,它会删除导入,因为它未使用。
--- rectangle.go ---
package shapes
import "gitlab.com/myproject/interfaces"
type rectangle struct{
length int
width int
}
func (r rectangle) Area() int {
return r.length * r.width
}
提前致谢。
【问题讨论】:
-
“它没有用”是什么意思?
-
您可以像其他任何东西一样引用其他包中的接口(在您的情况下为
interfaces.Shaper)。我认为这个问题没有任何真正的问题;你应该澄清你有什么问题(最好通过minimal reproducible example)。 -
我已经解释了更多关于我面临的问题。我认为这是一个最小的完整且可验证的示例。你能用代码解释一下在这种情况下引用或实现接口的例子吗?提前致谢。
-
@Sanketh 是的,接口既不必在同一个包中,也不必为实现它的类型导入。
标签: go