前言
本专栏是笔者在学习《Go程序设计语言》这本书时,对每个章节认为较为重要(容易忘记👻)的知识点记录的笔记,其中也会有少量的思考👀, 现整理成博客分享出来。
如果对专栏感兴趣,跑过去看一眼,书中的每一章都有:《Go程序设计语言》笔记
❗️注意❗️:本专栏不是详细的知识讲解,只是碎片的知识条目,或可作为Go知识点查漏补缺的小工具~
引言
- 任何包管理系统的目的都是通过对关联的特性进行分类,组织成便于理解和修改的单元,使其与程序的其它包保持独立;模块化允许包的复用;
Go
程序编译比较快,原因有三:- 所有导入文件都需要在包开头显式列出,这样编译器确定依赖时就不需要读取完整文件;
- 包的依赖形成有向无环图,所以包可独立甚至并行编译;
- 包输出文件不仅包含自己的导出信息,还记录它所依赖包的导出信息;
导入路径
Go
语言规范没有定义字符串如何确定一个包的导入路径,它通过工具来解决这些问题;- 对于准备共享的包,其导入路径需要全局唯一;
- 除了标准库中的包,其它包一般以互联网域名作为开始,便于查找;
包的声明
- 通常包名是导入路径的最后一段;所以路径不同的包可能包名相同;如
html.template
和text.template
; - 最后一段的例外:
- 如果包定义了一条命令(可执行的
Go
程序),则包名必须为main
; - 文件如果以
_test.go
结尾,则包名中会出现_test
结尾; - 包名不包含版本号后缀,如:
gopkg.in/yaml.v2
;包名为yaml
;
- 如果包定义了一条命令(可执行的
导入声明
gofmt
和goimports
会自动对导入包进行分组和排序;通常按照字母顺序;- 如果导入两个同名包,需要为其中一个命名;
- 如果依赖形成了循环,则
go build
工具会报错;
空导入
-
import _ "xxx"
:导入xxx
包,但不显式使用;如:import( _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" )
包及其命名
- 创建一个包时,采用简短的名字,如
http、fmt、ioutl
等;
go工具
go
工具可用来:下载、查询、格式化、构建、测试、安装Go
代码包;go env
查看、设置环境变量,常见环境变量:GOOS
:目标操作系统;GOARCH
:目标架构;GOPATH
:第三方包下载路径,或是老式包组织方法使用的目录;GOROOT
:一般为Go
的安装目录;
go get
下载单一的包;go install
安装一个Go
包,编译后保存在GOPATH/pkg
中,可执行的命令保存在GOPATH/bin
中;- 包声明之前的注释被认为是整个包的注释,通常只能有一个;
go doc
输出在命令行上指定的内容的声明和整个文档注释;可以go doc time
、go doc time.Since
等;go list pkgname
查询是否包含该包,包含则输出位置;
如有错误 ❌ ,欢迎指正 ☝️~
如有收获 🍗,可以考虑点赞👍/评论💬/收藏⭐️/关注👀,大家共同进步~