我看 gopher 说得都比较少,那就由我献献丑吧。
如果有兴趣的话,可以看看 go 的标准库。一个语言的标准库可以说明一个语言的使用习惯与组织语言的方式的,至少我是这么认为的。
引:"我受不了一个目录里有几十个文件"
一个文件夹(package) 下的所有 .go 文件其实可以全部写在一个文件的,我觉得并不会有什么差异。
但为何要分开?比如标准库 net 包,也有几十个文件,不过这每个文件名都可以很好的描述本文件所写的内容,对于查看代码会有更好的辅助,浏览一下整个包的文件列表,可以大致了解这个包提供的功能。
一般我认为一个包会提供若干个方法来实现一个共同的功能,如果一个包提供了多个不相干的功能,那是否需要考虑拆分一下,让项目结构更友好。
标准库也有像 strings、sort、path、sync 这样的包,文件没有几个,却让你一看名字就知道是什么样的功能。当然还有常用的 fmt 包。
如果你认同标准库的组织方式,并从中吸取了组织的方式,那你写起 go 来也神清气爽。
如果你不认同标准库的组织方式,那我说再多我自己写 go 的方式也木有用了。
最后给个选修链接, 业界大佬写的,有些兴趣的朋友可以阅读一下,受益匪浅。
《 Practical Go: Real world advice for writing maintainable Go programs 》:
https://dave.cheney.net/practical-go/presentations/qcon-china.html