go语言实战第三章读书笔记 - 打包和工具链
包
包名
给包名取名字的惯例是包名与目录名相同,我们以net/http包为例,http文件夹下的所有文件都属于http包,并且名字简洁全都是小写,这样为了开发时方便。虽然导入包后名字通常以包名.函数名的方式引用包内容,但实际上并不要求所有包的名字都不相同,一来是在import中可以使用路径名来确定为一包,二是在导入后可以对包名重命名,这样可以有效的区别不同路径的同名包。
导包
通常情况下我们导入系统包是直接”packagename”的形式导入。
1 | import ( |
此时编译器是根据go环境变量设置的路径导入的,包的搜寻路径如下:
1 | usr/local/go/src/pkg/ 标准库 |
远程导入
是的,go语言还支持分布式导入包,例如可以使用以下形式来导入包
1 | import ( |
用导入路径编译程序时, go build 命令会使用 GOPATH 的设置,在磁盘上搜索这个包。事实上,这个导入路径代表一个 URL,指向 GitHub 上的代码库。如果路径包含 URL,可以使用 Go 工具链从DVCS 获取包,并把包的源代码保存在 GOPATH 指向的路径里与 URL 匹配的目录里。这个获取过程使用 go get 命令完成。 go get 将获取任意指定的 URL 的包,或者一个已经导入的包所依赖的其他包。由于 go get 的这种递归特性,这个命令会扫描某个包的源码树,获取能找到的所有依赖包。
命名导入
加入要导入的俩个包名字相同,例如要导入network/convert和/file/convert时。导入的包重名了,此时应该通过重命名的方式来解决重名问题。
1 | import ( |
使用go命令行工具
常见的命令行工具有如下:
go build 和 go clean
字面意思,构建和清理。
1 | go build hello.go #构建hello.go的源程序,文件名是hello |
go run
1 | 构建并运行go程序 |
go vet
这个命令不会帮开发人员写代码,但如果开发人员已经写了一些代码, vet 命令会帮开发人员检测代码的常见错误。会捕获以下类型的错误
1 | Printf 类函数调用时,类型匹配错误的参数。 |
使用方式
1 | go vet main.go |
go语言文档
go doc
在命令行中使用此命令可以很方便的获取包对应的文档,例如
1 | go doc fmt |
1 | Package fmt implements formatted I/O with functions analogous to C's printf |
假如你不习惯在命令行中查阅文档,go也提供了浏览器查看的服务,不过此服务在go 1.13之后的版本的默认包中移除了,需要程序员手动下载配置,以下是下载地址,我安装时提示需要使用1.17之后的版本,由于我的go版本是Macos最新的1.16,此时还未提供1.17版本,因此此服务并没有安装成功,以下是对应包的下载地址
1 | git clone https://github.com/golang/tools %GOPATH%/src/golang.org/x/tools |
之后go build,mv到gopath下即可。
该命令的使用方式是
1 | godoc -http:=6060 |
然后浏览器访问本地端口即可。