我知道这可能会引起争议或不是很广泛,但我将尝试非常具体并涉及其他问题。好的,所以当我编写 Go 程序时,我应该考虑如何组织我的项目?(例如,我应该认为好吧,我将拥有某种控制器,所以我应该有一个控制器子目录来执行此操作,因此我应该拥有它)我应该如何构建一个包?例如,我正在处理的当前程序我正在尝试SteamBot使用这个包但是当我写它的时候我不知道我是否应该将某些方法导出到他们自己的文件中,例如我有类似的东西func (t *tradeBot) acceptTrade() {}func (t *tradeBot) declineTrade() {}func (t *tradeBot) monitorTrade() {}func (t *tradeBot) sendTrade() {}每个方法都会有相当多的代码,所以我应该将每个方法导出到自己的文件中,还是只有 1 个包含 3000 行代码的文件?还使用全局变量,以便我可以设置一个变量,然后保留它并能够在多个函数中使用它,或者这是否不好,我应该将变量作为参数传递?我还应该订购我的文件,如:packageimportsconstantsvariablesfunctionsmethods还是我只是把东西放在我需要的地方?
2 回答
SMILET
TA贡献1796条经验 获得超4个赞
首先寻找灵感的地方是Go 标准库。Go 标准库是关于“好的”Go 代码应该是什么样子的一个很好的指南。库与应用程序并不完全相同,但它绝对是一个很好的介绍。
一般而言,您不会将每个方法分解到其自己的文件中。Go 倾向于喜欢涵盖某个主题的较大文件。不过,3000 行似乎相当大。就连net/http server.go也只有2200行,还挺大的。
全局可变变量在 Go 中与在任何语言中一样糟糕。由于 Go 非常依赖并发编程,因此全局可变变量非常可怕。不要那样做。一个常见的例外是sync
像sync.Pool
orsync.Once
这样的结构,它们有时是包全局的,但也被设计为并发访问。有时也有结构的“默认”版本,例如http.DefaultClient
,但您仍然可以将显式版本传递给函数。再次查看 Go 标准库,看看什么是常见的,什么是罕见的。
三国纷争
TA贡献1804条经验 获得超7个赞
只是一些您希望有用的提示:
按功能而不是按层将代码组织成多个文件和包。您的应用程序越大,这变得越重要。
controllers
带有一两个控制器的包可能没问题,但是将数百个不相关的控制器放在同一个包中没有任何意义。下面这篇文章解释得很好:http : //www.javapractices.com/topic/TopicAction.do?Id=205全局变量有时会使代码更容易编写,但应谨慎使用。我认为记录器、调试标志等未导出的全局变量是可以的。
- 2 回答
- 0 关注
- 180 浏览
添加回答
举报
0/150
提交
取消