go项目的搭建是非常简单的,你随便找一个空文件夹,创建一个go.mod文件和一个main.go文件,一个最简易的项目就出来了,你可以围绕main.go不断拓展你的业务,但是,这并不适合项目膨胀。
在提到项目文件结构之前,我想先对go.mod做几点标记。
首先,mod文件应该放在你的项目的根目录下,不要将他放到项目中的哪个文件夹下,对于整个项目而言,go.mod所在的位置就是项目根路径,对于同项目不同包的引用都是参照go.mod的位置和包声明的。
比如,go.mod文件内容如下:
module example.com
go 1.18
/RootPath/cmd/myentry/main.go/RootPath/internal/decrypt/decrypt.goDecrypt()main.goexample.com/internal/decryptdecrypt.Decrypt()
GOPATHGOPATH.../src/
GOPATHGO111MODULEGOPATHgo.mod/binGOBINGOPATH/build
项目结构
上面我提到了一些子路径,如此这般的项目整体规划并不是规定,也不是规则,更不是官方的建议。
对于项目如何搭建、文件结构如何设计,其实都是开发者自己的选择和体验。
甚至,对于小型项目、玩具项目,你甚至不必去管文件结构。那只是种费力不讨好的事情。还有可能消耗掉新手对于这门语言的耐性。
go run main.go
你甚至不需要IDE。
但是,如果你对于项目的迭代、膨胀是有预期的,且项目内容比较多以至于如果不进行项目管理、文件结构设计的话,会让开发体验降低,那么我比较推荐你学习一下这篇文章中的项目结构规范。
再强调一遍,这不是规定、也不是规则、更不是建议,作为参考即可。
我在这里也做了个简单的总结:
/*
--Project path
--bin 可执行文件
--build 编译构建结果
--cmd 代码,甚至可以只有一个main
--具体包名
--config 配置文件
--docs 文档文件
--example 样例应用程序
--internal 不便在cmd做展示的、需要隐藏的、需要加密的代码
--pkg 外部应用程序使用的代码库
--script 脚本
--test 测试代码
--tools 编写的工具,可以从pkg、internal引入代码
--vender 应用程序依赖项
go.mod
*/
或许你会注意到,这里并没有/src路径的座位,这是因为src是java的编程习惯,java通过src分割了框架在做的事情,和开发者写下的事情。
而Go由于模块引入的便捷,以及语言本身的特性,其实并不需要这么做。
对于上面这样的文件结构设计来说,cmd并不会存放太多的代码,大多数的代码都放在了internal(需要保证私有性的)、tools、vender、pkg中。
当然,即便是用了src作为具体代码路径,也不会产生什么影响。
项目编译go build
go install
具体的命令使用就不多赘述了。