教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 go tool简介

go tool简介

发布时间:2023-03-24   编辑:jiaochengji.com
教程集为您提供go tool简介等资源,欢迎您收藏本站,我们将为您提供最新的go tool简介资源

go build

  • -o 指定编译输出的文件(默认与目录同名)可以带路径 go build -o a/b/c
  • -a 强制重新编译所有包(含标准库)
  • -p 指定可以并行可运行的编译数目,默认是CPU数目
  • -v 打印正在编译的包名
  • -n 仅显示编译命令,但是不执行
  • -x 显示正在执行的命名
  • -work 显示临时工作目录,完成后不删除
  • -race 开启编译的时候自动检测数据竞争的情况,目前只支持64位机器
  • -gcflags 编译器参数
  • -ldflags 链接器参数

gcflags

  • -B 禁用越界检查
  • -N 禁用优化
  • -l 禁用内联
  • -u 禁用unsafe
  • -S 输出汇编代码
  • -m 输出优化信息

ldflags

  • -s 禁用符号表
  • -w 禁用DRAWF调试信息
  • -X 设置字符串全局变量值 -X ver="0.99"
  • -H 这只可执行文件格式 -H windowsgui

go install

和build参数相同,但是会将编译结果安装到bin,pkg目录。关键是go install支持增量编译,在没有修改的情况下,会直接链接pkg目录中的静态包

编译器用builddid检查文件清单和导入依赖,对比现有静态库和所有源文件修改时间来判断源码是否变化,以此来决定是否需要对包进行重新编译

buildid:将包的全部文件名,运行时版本号,所有导入的第三方包信息(路径buildid)数据合并后哈希

go get

将第三方包下载到GOPATH列表的第一个工作空间,默认不会检查更新,须使用 -u 参数

  • -d 仅下载,不安装
  • -u 更新包,包括其依赖项
  • -f 和-u配合,强制更新,不检查是否过期
  • -t 下载测试嗲啊所需的依赖包
  • -insecure 使用http 等非安全协议
  • -v 输出详细信息
  • -x 显示正在执行的命名

go clean

清理工作目录

  • -i 清理go install安装的文件
  • -r 递归清理所有依赖包
  • -x 显示正在执行的清理命令
  • -n 仅显示清理命令,但不执行


交叉编译(交叉编译不支持CGO)

指在一个平台下编译出其他平台所需的可执行文件

GOOS=linux go build
GOOS=windows GOARCH=386 go build

建议使用go install 命令为目标平台预编译好标准库,避免go build每次都须完整编译

GOOS=linux go install std
GOOS=linux go install cmd


条件编译

除在代码中用runtime.GOOS 进行判断外,编译器本身就支持文件级别的条件编译。

方法一. 将平台和架构信息添加到文件名尾部

eg:hello_drawin.go hello_linux.go

方法二. 使用build编译指令

eg

// build windows

// build linux darwin

可以添加多条build,表示多个AND条件,在单一指令里,空格表示OR条件,逗号表示AND 感叹号表示NOT

// build linux darwin

// build 386,!cgo

相当于 (linux or darwin)AND (386 AND (NOT cgo))

方法三. 使用tag指令

// build !release

go build -tags "release " && ./test


预处理

用go generate 命令扫描源码文件,找出所有 go:generate 注释,提取其中的命令并执行

  • 命令必须放在.go 源文件中
  • 命令必须以 "//go:generate" 开头 双斜线后不能有空格
  • 每个文件可有多条generate命令
  • 命令支持环境变量
  • 必须显示执行go generate命令
  • 按文件名顺序提取命令并执行
  • 串行执行,出错后终止后续命令的执行

参考资料

https://leokongwq.github.io/2016/10/15/golang-cross-compile.html​leokongwq.github.io

到此这篇关于“go tool简介”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:

[关闭]
~ ~