Go笔记之一:工程项目结构的注意事项
对 Go 项目目录的理解 (Windows平台为例)
刚安装完的 Go 需要设定环境变量,最关键的环境变量有三个,GOROOT、GOPATH和GOBIN。GOROOT应该设定为 GO 在当前环境下的安装根目录,通常因为 windows 平台都是由安装工具安装完成,因此 windows 平台一般不需要设置。GOPATH 理解为是开发者的“工作区”,即表示进行开发编译 Go 程序的工作区,因此 GOPATH 允许设定多值。而 GOBIN 在 GOPATH 被设定为多值时发挥作用,即用于存放由 go install
命令产生的可执行文件。
用一个项目具体举例
项目取名 calcproj
,包含一个可执行程序 calc.exe
和一个独立库,项目结构如下
> calcproj
> |--calc.go
> |--lib
> |--less.go
less.go
实现了自定义类型:Integer,并提供了一个方法 Less( b Integer ),该方法实现返回当前值是否小于参数值的结果
package lib
type Integer int
func (a Integer) Less(b Integer) bool {
return a < b
}
calc.go
是入口 main,调用 Less
方法并打印出结果,为了方便,main
函数中的赋值被固定
package main
import(
"fmt"
"lib"
)
func main(){
var a lib.Integer = 3
fmt.Println(a, a.Less(2));
}
进入 src
目录运行 go build calc.go
或go build
,在src
目录下获得可执行文件calc.exe
,使用命令行工具运行,得到结果
C:\cinlapgo\calcproj\src>calc.exe
3 false
由书+实践+热心网友得到的经验总结
- [x] Go的项目可以以自定义名称开头,如
myhello
、TxtReader
等等 - [x] 在项目目录下,按照 Go 的规则(至少)建立
src
目录 - [x] 以
src
为根目录,main
包就放在src
下,如果有其它包(如C#中的dll),就建子目录。子目录名字就是包名称,其下的 go 文档开头的也要符合该格式package 包名称(目录名)
[x] 如何正确的对待命令源码文件
- [x] 当代码包有且仅有一个命令源码文件时,在所在目录中执行
go build
命令,即可在该目录下生成一个与目录同名的可执行文件;若使用go install
命令,则可在当前工作区bin
目录下生成相应的可执行文件 - [x] 命令源码文件不能与库源码文件在同一个代码包,否则无法正确执行
go build
和go install
命令 - [x] 同一个代码包中可以有多个命令源码文件,通过
go run
命令分别运行,但这会使go build
和go install
命令无法编译和安装该代码包。
- [x] 当代码包有且仅有一个命令源码文件时,在所在目录中执行
感谢
特别感谢Go语言技术交流群的 @【副总】西安-n1ce和@【总裁】重庆-im帥
参考资料
- 参考书籍:《Go并发编程实战》
- 参考书籍:《Go语言编程》