Golang - 具有结构,变量和接口的代码组织

Pas*_*per 18 go

我有一个代码库,其中一个文件包含很多Structs,Interfaces并且Variables在与函数相同的文件中,我不确定是否需要将其分隔成具有附加文件名的单独文件.因此,例如,accounts.go将accounts_struct.go和accounts_interface.go分别与结构和接口.

当您为Structs,Variables和Interfaces增加代码库时,文件组织的好方法是什么?

Von*_*onC 18

一个很好的模型是Go本身的源代码:http://golang.org/src/pkg/

您将看到这种方法(基于语言项,如struct,interface,...分离)从未使用过.

所有文件都基于功能,最好使用邻近原则方法,您可以在同一文件中找到您正在使用的定义.
通常,这些功能在每个包中分组为一个文件,大型包除外,其中一个包由许多文件组成(net,net/http)

如果要分隔任何内容,请将source(xxx.go)与tests/benchmarks(xxx_test.go)分开


Dav*_*ney 18

这是我设计包的心理模型.

一个.一揽子计划应包含一个想法或概念.http是一个概念,http客户端或http消息不是.

湾 包中的文件应包含一组相关类型,一个好的经验法则是,如果两个文件共享同一组导入,则合并它们.使用前面的例子,http/client.go,http/server.go是粒度的良好水平

C.不要为每种类型做一个文件,这不是惯用的Go.