运行环境
- window
- linux
- freeBSD
- darwin
环境变量
- GOROOT: 根目录
- GOPATH: 工作目录
- GOBIN: 可执行文件目录
添加环境变量
- vim /etc/profile
- export PATH=$PATH:/usr/local/go/bin
- export GOPATH=/home/go/workspace
源码组织方式
- 代码包为基本组织单位
- 一个代码包中包含任意个源码文件
- 源码文件需要声明属于同一个代码包
- 代码包的名称一般与源码文件所在目录同名
构建与安装
- go build: 构建命令
- go install: 安装命令
- go help xxx : 查看帮助
- go get xxx : 获取代码包
- 归档文件(*.a)放到pkg目录
- 可执行文件放到bin目录
go bulid
- -a : 强制编译所有关联的软件包
- -i : 编译安装归档文件
- -x : 输出详细信息
- -n : 仅查看会执行哪些操作,不会执行编译
- -v : 输出编译的代码包的名称
- -o : 自定义可执行文件名称
- -p n : 指定编译过程中执行各任务的并行数量
- -race : 开启竞态条件检测
- -work : 打印出编译时生成的临时工作目录路径,并在编译结束后保留
- -asmflags : 控制编译器的行为
- -bulidmode : 指定编译模式
- -compiler : 指定当前使用的编译器的名称, gc/gccgo
- -gccgoflags : 指定传递给gccgo编译器或链接器的标记列表
- -gcflags : 指定传递给go tool compile命令的标记列表
- -installsuffix : 使当前的输出目录与默认的编译输出目录分离
- -ldflags : 指定需要传递给go tool link命令的标记列表
- -linkshared : 与-buildmode=shared一起使用,buildmode将归档文件合并到一个动态链接库文件中,linkshared则进行链接操作
- -pkgdir : 指定一个目录,编译器从该目录加载归档文件,并将生成的归档文件放到该目录
- -tags : 指定在实际编译期间的编译标签列表
- -toolexec : 自定义在编译期间使用一些自带工具的方式
go install
- go install = go build + 结果文件放到指定目录
- go install 代码包相对路径
go run
- 编译并运行命令源码文件,可执行文件放在临时工作目录中
- go run= gobulid + 运行
- -n : 打印执行的命令不执行
- -name="xxx": 传入运行参数
go test
- 以代码包为单位的测试
- 自动测试指定的代码包
- 测试源码文件以"_test.go"为后缀
- -c : 生成可执行文件,但不运行
- -i : 安装测试需要的依赖包
- -o : 指定可执行文件的名称
go get
- -u : 下载并安装,不管是否存在
- -f : 配合-u选项,忽略已下载代码包的导入路径的检查
- -v : 打印被构建代码包的名字
- -x : 打印go get执行过程中使用的所有命令
- -d : 仅下载代码包
- -fix : 先运行代码版本修正工具,再安装代码包
- -t : 下载并测试代码包
- -insecure : 允许通过非安全网络协议下载
- etc : go get -d github.com/json-iterator/go
go clean
- 同名的可执行文件
- 临时文件
- go test生成的.test后缀的文件
- -i : 同时删除安装当前代码包所产生的结果文件
- -r : 递归对依赖包执行go clean命令
- -n : 打印会执行的命令,但不会执行
- -x : 打印执行的命令,并执行
go doc
- 打印程序实体上的文档
- 程序实体: 变量,常量,函数,结构体和接口
- -c : 区分大小写
- -cmd : 同时打印出main包中的可导出的程序实体文档
- -u : 同时打印出不可导的程序实体的文档
- etc : go doc fmt
- etc : go doc http.Request
- etc : go doc net/http Request
godoc
godoc -http=:6060 通过localhost:6060访问帮助文档 -index : 标记开启搜索索引 -maxresults : 全文搜索结果条目的最大显示数量
go list
- 列出指定的代码包信息
- -e : 以容错模式加载和分析指定代码包
- -json : 以json格式打印出信息
- -f : 查看指定字段 etc : go list -f {{.ImportPath}} fmt
go fmt
- 按代码规范格式化源码文件,底层调用gofmt etc : go fmt ./
- -n : 打印操作,不执行
gofmt
- 按代码规范格式化源码文件
- cpuprofile : 把cpu概要文件写入指定文件
- -d : 显示格式化前后的不同,而不执行式化操作
- -e : 报告目标源码文件的所有错误
- -l : 把不符合格式化规范的源码文件的绝对路径打印出来
- -r : 添加自定义的格式化规则
- -s : 简化文件中的代码
- -w : 把改写后的文件写入文件中,而不是打印出来
- 格式化内容:
- 按字典顺序排序依赖包导入代码块
- 缩进,空行和换行
- 对代码语法的小修正
- -r:
- 程序实体名称替换; -r=array1->array2
- 程序实体类型的替换; -r=interface{}->int
- 多余圆括号的清除; -r=(x)->x
- 数值操作的替换; -r=x+x->x*2
- 基于参数列表的函数调用替换; -r='func(a)->func(a, c)'
- -s:
- 消除在数组/切片初始化中不必要的类型声明
- 消除在字典初始化中不必的类型声明
- 消除在数组/切片操作时不必要的索引指定
- 消除迭代时不必要的临时变量赋值操作
| 功能 | go fmt命令 | gofmt命 |
|---|---|---|
| 格式化代码 | yes | yes |
| 列出不规范的源码文件 | yes | yes |
| 自动改写源码文件 | yes | yes |
| 显示对比信息 | no | yes |
| 提示全部错误 | no | yes |
| 简化代码 | no | yes |
| 自定义替换/重构辅助 | no | yes |
| cpu概要记录 | no | yes |
go fix
- 将指定代码包中旧版本代码修正为新版本的代码
- 旧程序调用->新程序调用
- 旧语法->新语法
go tool fix
go fix 的底层调用
- -diff : 不将修正后的内容写入文件,打印修正前后的对比信息到标准输出
- -r : 对目标源码文件做有限的修正操作
- -force : 强行执行修正操作
- -? : 查看帮助
go vet
- 用于检查源码中静态错误
- -n : 打印操作不执行
- -x : 打印操作并执行
go tool vet
- go vet 的底层调用
- -all : 全部检查
- -asmdecl : 对汇编语言的源码文件进行检查
- -assign : 检查赋值语句
- -atomic : 检查代码包sync/atomic的使用方式
- -buildtags : 检查编译标签的有效性
- -composites : 检查复合结构实例的初始化代码
- -compositeWhiteList : 是否使用复合结构检查的白名单
- -methods : 检查那些拥有标准命名方法的签名
- -printf : 检查代码中对打印函数的使用是否正确
- -printffuncs : 检查代码中使用的打印函数的名称列表
- -rangeloops : 检查range语句块迭代变量是否使用正确
- -structtags : 检查结构体类型字段标签格式
- -unreachable : 检查并报告不可达代码
go tool pprof
- 交互式的访问概要文件
- 概要文件:
- runtime和runtime/pprof代码包生成
- 类别: cpu概要文件,内存概要文件和程序阻塞概要文件
- cpu概要文件:
- 默认100Hz的采样频率
- 对当前goroutine堆栈上的程序计数器取样
- 内存概要文件:
- 保存程序执行期间内存使用情况
- 默认取样间隔512kB
- 程序阻塞概要文件:
- 保存程序阻塞事件的记录
- 默认的取样间隔为1次
go tool cgo
- 创建能够调用C语言的源码文件
| 名称 | 默认值 | 说明 |
|---|---|---|
| -cdefs | false | 将改写后的源码内容以C定义模式打印到标准输出,而不生成相关的源码文件。 |
| -godefs | false | 将改写后的源码内容以Go定义模式打印到标准输出,而不生成相关的源码文件。 |
| -objdir | "" | gcc编译的目标文件所在的路径。若未自定义则为当前目录下的_obj子目录。 |
| -dynimport | "" | 如果值不为空字符串,则打印为其值所代表的文件生成的动态导入数据到标准输出。 |
| -dynlinker | false | 记录在dynimport模式下的动态链接器信息。 |
| -dynout | "" | 将-dynimport的输出(如果有的话)写入到其值所代表的文件中。 |
| -gccgo | false | 生成可供gccgo编译器使用的文件。 |
| -gccgopkgpath | "" | 对应于gccgo编译器的-fgo-pkgpath选项。 |
| -gccgoprefix | "" | 对应于gccgo编译器的-fgo-prefix选项。 |
| -debug-define | false | 打印相关的指令符#defines及其后续内容到标准输出。 |
| -debug-gcc | false | 打印gcc调用信息到标准输出。 |
| -import_runtime_cgo | true | 在生成的代码中加入语句“import runtime/cgo”。 |
| -import_syscall | true | 在生成的代码中加入语句“import syscall”。 |
go env
- 打印环境信息
| 名称 | 说明 |
|---|---|
| CGO_ENABLED | 指明cgo工具是否可用的标识。 |
| GOARCH | 程序构建环境的目标计算架构。 |
| GOBIN | 存放可执行文件的目录的绝对路径。 |
| GOCHAR | 程序构建环境的目标计算架构的单字符标识。 |
| GOEXE | 可执行文件的后缀。 |
| GOHOSTARCH | 程序运行环境的目标计算架构。 |
| GOOS | 程序构建环境的目标操作系统。 |
| GOHOSTOS | 程序运行环境的目标操作系统。 |
| GOPATH | 工作区目录的绝对路径。 |
| GORACE | 用于数据竞争检测的相关选项。 |
| GOROOT | Go语言的安装目录的绝对路径。 |
| GOTOOLDIR | Go工具目录的绝对路径。 |