长安米贵,居大不易
历史上无论哪朝哪代,像“长安”这种地方,对于绝大部分的普通人而言,即使拼尽全力,大概率也是无法留下来的,因此针对这样的现实就连唐朝伟大的诗人白居易都感叹道:“长安米贵,居大不易”。到今天面对同样的情景,现在的年轻人直接选择躺平,与其天天996、007为他人交房租还不如索性躺平:“不结婚、不买车、不买房”,我的青春我做主。
go的相关命令
1、go build
主要用来编译代码,如果是普通包,执行之后不会产生任何文件,如果需要在 G O P A T H / p k g 下 生 成 文 件 , 需 要 执 行 g o i n s t a l l ; 如 果 是 在 m a i n 包 下 , 执 行 g o b u i l d 之 后 , 会 在 当 前 目 录 下 生 成 一 个 可 执 行 文 件 , 如 果 需 要 在 GOPATH/pkg下生成文件,需要执行go install;如果是在main包下,执行go build之后,会在当前目录下生成一个可执行文件,如果需要在 GOPATH/pkg下生成文件,需要执行goinstall;如果是在main包下,执行gobuild之后,会在当前目录下生成一个可执行文件,如果需要在GOPATH/bin下生成相应的文件,需要执行go install 文件;如果某个目录下有多个文件,但是只想编译指定的文件可以在go build之后加上文件名。除此之外需要注意的是go build会忽略目录下以 _ 或者 . 开头的go文件 。
go build参数说明
-o 指定输出的文件名,可以带上路径,例如 go build -o a/b/c
-i 安装相应的包,编译 + go install
-a 更新全部已经是最新的包的,但是对标准包不适用
-n 把需要执行的编译命令打印出来,但是不执行,这样就可以很容易的知道底层是如何运行的
-p n 指定可以并行可运行的编译数目,默认是 CPU 数目
-race 开启编译的时候自动检测数据竞争的情况,目前只支持 64 位的机器
-v 打印出来我们正在编译的包名
-work 打印出来编译时候的临时文件夹名称,并且如果已经存在的话就不要删除
-x 打印出来执行的命令,其实就是和 -n 的结果类似,只是这个会执行
-ccflags 'arg list' 传递参数给 5c, 6c, 8c 调用
-compiler name 指定相应的编译器,gccgo 还是 gc
-gccgoflags 'arg list' 传递参数给 gccgo 编译连接调用
-gcflags 'arg list' 传递参数给 5g, 6g, 8g 调用
-installsuffix suffix 为了和默认的安装包区别开来,采用这个前缀来重新安装那些依赖的包,-race 的时候默认已经是 -installsuffix race,大家可以通过 -n 命令来验证
-ldflags 'flag list' 传递参数给 5l, 6l, 8l 调用
-tags 'tag list' 设置在编译的时候可以适配的那些 tag
2、go clean
主要用来一处当前源码包和关联源码包里编译生成的文件
go clean参数说明
-i 清除关联的安装的包和可运行文件,也就是通过 go install 安装的文件
-n 把需要执行的清除命令打印出来,但是不执行,这样就可以很容易的知道底层是如何运行的
-r 循环的清除在 import 中引入的包
-x 打印出来执行的详细命令,其实就是 -n 打印的执行版本
3、go fmt
主要用来针对编写的代码采用统一的格式化标准。
go fmt参数说明
-l 显示那些需要格式化的文件
-w 把改写后的内容直接写入到文件中,而不是作为结果打印到标准输出。
-r 添加形如 “a [b:len (a)] -> a [b:]” 的重写规则,方便我们做批量替换
-s 简化文件中的代码
-d 显示格式化前后的 diff 而不是写入文件,默认是 false
-e 打印所有的语法错误到标准输出。如果不使用此标记,则只会打印不同行的前 10 个错误。
-cpuprofile 支持调试模式,写入相应的 cpufile 到指定的文件
4、go get
主要用来获取远程代码包,执行该命令的过程中内部实际分成了两步来执行,第一步下载源码包,第二步执行go install。
go get参数说明
-d 只下载不安装
-f 只有在你包含了 -u 参数的时候才有效,不让 -u 去验证 import 中的每一个都已经获取了,这对于本地 fork 的包特别有用
-fix 在获取源码之后先运行 fix,然后再去做其他的事情
-t 同时也下载需要为运行测试所需要的包
-u 强制使用网络去更新包和它的依赖包
-v 显示执行的命令
5、go install
主要用来生成目前文件,内部实际分成两步,第一步生成结果文件,第二步将编译好的结果移到 G O P A T H / p k g 或 者 GOPATH/pkg或者 GOPATH/pkg或者GOPATH/bin目录下。
6、go test
主要用来执行单元测试文件
go test参数说明
-bench regexp 执行相应的 benchmarks,例如 -bench=.
-cover 开启测试覆盖率
-run regexp 只运行 regexp 匹配的函数,例如 -run=Array 那么就执行包含有 Array 开头的函数
-v 显示测试的详细命令
7、go tool
主要用来运行指定的go tool工具
go tool fix . 用来修复以前老版本的代码到新版本,例如 go1 之前老版本的代码转化到 go1, 例如 API 的变化
go tool vet directory|files 用来分析当前目录的代码是否都是正确的代码,例如是不是调用 fmt.Printf 里面的参数不正确,例如函数里面提前 return 了然后出现了无用代码之类的。
8、go doc
主要用来查看文档相关的内容
9、go list
主要用来查看当前全部安装的package
小结
go中的命令其实远不止上面列举的这几种,从日常使用的频率触发列举出了上面的这几种,其中go build、go clean
、go install、go get使用的比较多,这些命令务必需要掌握。