gpt4 book ai didi

go - 如何在golang中实现不同包的接口(interface)?

转载 作者:IT老高 更新时间:2023-10-28 13:09:05 35 4
gpt4 key购买 nike

我是 golang 的初学者,正在尝试接口(interface)。我想将接口(interface)保存在单独的包中,以便我可以使用它在各种其他包中实现它,也将它提供给其他团队(.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 接口(interface)?我知道 go 隐式实现接口(interface),这是否意味着 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
}

提前致谢。

最佳答案

有一个优秀的section in the go wiki关于接口(interface):

Go interfaces generally belong in the package that uses values of the interface type, not the package that implements those values. The implementing package should return concrete (usually pointer or struct) types: that way, new methods can be added to implementations without requiring extensive refactoring.

这还有一个好处是它减少了包之间的耦合(通过不强制任何人只为接口(interface)导入你的包)并且它通常会导致更小的接口(interface)(通过允许人们只使用你想要的接口(interface)的一个子集已建成)。

如果您是新手,我强烈建议您阅读我链接的“Go Code Review Comments”wiki 文章,如果您有更多时间,还可以 Effective Go .快乐的黑客攻击!

关于go - 如何在golang中实现不同包的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44346572/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com