大家好,我知道这可能有争议或不是很广泛,但我会尝试非常具体,并与其他问题有关。
好的,当我制作一个Go程序时,我应该考虑如何组织我的项目? (例如,我应该认为我会有某种类型的控制器,所以我应该有一个控制器子目录,这样做我应该这样做)
我应该如何构建一个包?
例如我正在处理的当前程序我正在尝试使用this包来SteamBot
但是当我写它时,我不知道是否应该将某些方法导出到他们自己的文件中,例如我有类似
的东西func (t *tradeBot) acceptTrade() {}
func (t *tradeBot) declineTrade() {}
func (t *tradeBot) monitorTrade() {}
func (t *tradeBot) sendTrade() {}
每个方法都会有相当多的代码,所以我应该将每个方法导出到自己的文件中,还是只有一个包含3000行代码的文件?
还使用全局变量,这样我就可以设置一个变量,然后保留它并能够在多个函数中使用它,或者这是不好的,我应该将变量作为参数传递?
我也应该订购我的文件:
package
imports
constants
variables
functions
methods
或者我只是把东西放在我需要的地方
希望我清楚自己,这不是一个可怕的问题。谢谢!
答案 0 :(得分:4)
寻找灵感的第一个地方是Go standard library。 Go标准库是“好”Go代码应该是什么样的很好的指南。库与应用程序不完全相同,但它绝对是一个很好的介绍。
通常,您不会将每个方法分解为自己的文件。 Go倾向于选择覆盖主题的较大文件。但是3000线看起来相当大。即使net / http server.go也只有2200行,而且非常大。
全局可变变量在Go中与在任何语言中一样糟糕。由于Go非常依赖并发编程,因此全局可变变量非常可怕。不要那样做。一个常见的例外是sync
结构,例如sync.Pool
或sync.Once
,它们有时是包全局,但也可以同时访问。有时候还有“默认”版本的结构,比如http.DefaultClient
,但你仍然可以将明确的版本传递给函数。再次,浏览Go标准库,看看什么是常见的,什么是罕见的。
答案 1 :(得分:1)
您希望找到一些有用的提示:
按功能将代码组织到多个文件和包中,而不是按图层组织。这变得越重要,您的应用程序就越大。带有一个或两个控制器的软件包controllers
可能没问题,但是将数百个不相关的控制器放在同一个软件包中没有任何意义。以下文章解释得非常好:http://www.javapractices.com/topic/TopicAction.do?Id=205
全局变量有时会使代码更容易编写,但应谨慎使用。我认为记录器,调试标志等事情的未导出的全局变量都可以。