我正在将一个大型Web应用程序移植到Go。为了管理复杂性并提高可测试性,我们采用面向服务的体系结构。我试图找出最清楚的方法来命名和构造包,使得任何服务都不知道另一个实现,并且我可以在应用程序级别区分它们。请允许我举个例子:
FooService接口
package api
type FooService interface {
foo()
}
FooService实施
package implementation
import (
"fmt"
_ "github.com/user/foo/api"
)
type FooImplementation struct {
}
func (self FooImplementation) foo() {
fmt.Println("foo")
}
在我的应用程序中,我需要将此实现绑定到接口以及许多其他接口。但它们都不能被命名为api / implementation。我是否也将软件包命名为fooapi和fooimplementation?或者有更好的方法来构建我的应用程序? 谢谢!
答案 0 :(得分:0)
我发现了一个潜在的解决方法,但我不打算将其标记为关闭,因为它并不理想。我发现您可以命名导入以消除具有相同名称的包的歧义。 E.g。
import (
fapi "github.com/user/foo/api"
fimplementation "github.com/user/foo/implementation"
)