## golang
```
go 是编译性语言。编译之后,在机器上运行机器码。
编译之后,脱离依赖,所有依赖都打包到一个可执行文件。
go 最小的共享单位是 包
go 以包组织代码
package main 编译出来的是一个可执行文件
go 的字符串,只能是双引号包裹。
go 的 {} 必须在行末
```
## 设置环境变量
```
1. export GOPATH=
2. export PATH=
3. export GOROOT=
```
## 第三方包 命名规则
```
package 名字
这个名字要和上层目录名字一样
```
## go install 第三方包 之后 在 src下生成的pkg
```
此文件夹 里 放的是 依赖的静态库 二进制文件。
结构是 架构 -> 项目目录结构
以后想用这个第三方包,就import 这个静态库。
build的时候,就会把这个二进制文件和你的程序编译到一个可执行文件里。
这样就没有了各种依赖的问题。
```
## go 的源码文件
一个包下可以有多个源码文件
每个源码文件 第一行 package 包名
其中如果没有 package main 就是一个静态库
如果 其中一个源码文件中 有package main 并且含有func main 则编译出来的是一个可执行文件
没有 pacakge main 开头的源码文件不能包含 func main 否则编译不过去。
go 导入 的时候不能导入单个文件。引用的最小粒度是 包
## go run
```
go run 快速执行一个文件,就像执行脚本一样
```
## go build
```
go build 生成一个二进制文件
```
## go insall
```
将main拷贝到bin下。将第三方包拷贝到pkg下
```
## go test
```
执行单元测试或者压力测试
导入 testing
用于测试的go文件必须是 _test 尾缀 例如 abc_test.go
里面的测试func 必须是 Test 开头例如 TestAdd
参数列表 t *testing.T 这些都是规范就这么写
go test -v 展示详细参数
t.Fatalf 相当于raise吧 如果条件不符合,主动抛错
t.t.Logf 成功输出,-v 可见
```
## go env
```
显示go相关的环境变量
```
## go fmt
```
格式化源码
```