gpt4 book ai didi

go - 在 Go 项目中组织接口(interface)及其实现的约定是什么?

转载 作者:IT王子 更新时间:2023-10-29 02:11:49 27 4
gpt4 key购买 nike

在 Go 项目中组织接口(interface)及其实现的约定是什么?

我是 Go 的新手,正在创建一个小项目,我目前有这个文件夹结构:

src/
my-repo/
solve/
backtracksolve.go
permutatesolve.go
...
solver.go

... (some repositories and packages omitted for brevity) ...

backtracksolvepermutatesolve 都实现了接口(interface) solver 因此将它们与接口(interface)和其他实现放在同一个包中是有意义的该接口(interface),来自 Java/C# 这是一个常见的约定,例如,java.util 包含诸如 SetMapList,同时还有 HashSetHashMapArrayList 等实现。

但是在 Go 中,因为它们都实现了 func Solve(),并且都在 package solve 中,所以存在 redeclared exception

为每个实现(下面)或完全不同的东西创建一个子目录是约定俗成的吗?

src/
my-repo/
solve/
backtrack/
backtracksolve.go
permutation/
permutatesolve.go

solver.go

最佳答案

您通常会定义实现Solver 接口(interface)的不同类型,然后在这些类型上定义Solve 函数。

func (s *BackTrackSolver) Solve() { … }
func (s *PermutateSolver) Solve() { … }

因为类型具有不同的名称,所以没有名称冲突。您可以在 the go playground 中在线试用.

关于您的包约定问题:我认为一个好的方法是从单个包中的所有代码开始,并且只导出您实际想要向调用者公开的类型和函数。然后稍后当你的 code cohesion drops 你应该开始将代码拆分成多个包。

另请参阅 go blog 中的“组织 Go 代码”一文,“将什么放入包中”小节(简短阅读)。

关于go - 在 Go 项目中组织接口(interface)及其实现的约定是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44346123/

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