首页 > 其他分享 >go build

go build

时间:2023-03-02 14:44:16浏览次数:38  
标签:help tool 编译 参数 build go


go help build

go tool link --help

go tool compile --help

 

 

 

go build -ldflags "-s -w" x.go (go install类似)

  • -s 去掉符号表,然后 panic 的时候 stack trace 就没有任何文件名/行号信息了,这个等价于普通C/C++程序被strip的效果。不推荐使用
  • -w 去掉 DWARF 调试信息,得到的程序就不能用 gdb 调试了,如果不打算用 gdb 调试,基本没啥损失。

 

 

ldflag

链接参数,我们通过go tool link --help 查看可用的参数

下面列举一些常用的参数

名称描述
-X 注入变量,通常用于版本信息注入

举例如下

go run -ldflags="-X main.who handsomeboy" main.go


链接:https://juejin.cn/post/7096772208999006244

build flags

build flags在build,clean,get,install,list,run,test等命令下都是通用的

下面记录一些常用的参数

名称描述
-tags ‘tag list’ (常用) 构建出带tag的版本.
-gcflags ‘arg list’ (常用)编译参数go tool compile --help查看所有可用的参数 .
-ldflags ‘flag list’ (常用)链接参数go tool link --help查看可用可用的参数
-mod (常用)readonly,vendor,mod 1.14版本以后,如果在mod文件里面有指定vendor,则默认使用vendor,否者设置为readonly
-race (重要)同时检测数据竞争状态,只支持 linux/amd64, freebsd/amd64, darwin/amd64 和 windows/amd64.
-trimpath (重要)删除编译包含的固定路径信息,如 -trimpath=$GOPATH,报错信息打印时只会包含文件的相对路径
-modfile 指定使用的modfile文件,但go.mod文件依然是需要的,用于确认编译包的根目录,gosum依然是需要的,如传入的xx.mod, 则需要或对应生成为 xx.sum
-n 仅打印输出build需要的命令,不执行build动作(少用)。
-p n 开多少核cpu来并行编译,默认为本机CPU核数(少用)。
-v 打印出被编译的包名(少用).
-work 打印临时工作目录的名称,并在退出时不删除它(少用)。
-x 同时打印输出执行的命令名(-n)(少用).

gcflag

编译参数,我们通过go tool compile -help包含哪些

下面列举一些常用的参数

名称描述
-m (常用)打印优化信息
-N 禁用优化 (debug时用到)
-l 禁止内联优化 (debug时用到)
-c 指定编译时的的并发数,默认为1
-L 错误信息中打印文件全名

gcflag传入的方式为: -gcflag="pattern= args",其中pattern代表取值分别为 main,all,std,...,用于指定编译参数作用的范围,args则为对应的编译参数


  参考:
链接:https://juejin.cn/post/7096772208999006244

 

 

标签:help,tool,编译,参数,build,go
From: https://www.cnblogs.com/rebrobot/p/17171726.html

相关文章

  • Google Chrome Version 110 All In One
    GoogleChromeVersion110AllInOneGoogleChromeVersion110.0.5481.177(OfficialBuild)(x86_64)chrome://whats-new/效率边浏览,边利用侧边栏整理和标记重点......
  • django 源码解读 python manage.py makemigrations
    分析命令之前,需要先了解makemigrations调用的一些类。这样对于后面分析命令时很轻松。1.MigrationRecorder类这个类在django/db/migrations/recorder.py文件中,这个类是......
  • golang 判断元素是否在切片中
    在Go中,可以使用类型为 map[T]bool 的映射来判断切片中是否包含某个元素。例如,假设你想要判断整型切片 s 中是否包含元素 x。你可以这样做://声明一个名为m的映......
  • go 下的查询数据库的框架 ORM框架:访问mysql数据库
    运维的基友习惯使用python了,学习go的时候是不是被gorm恶心死了例如pythonflask框架下的orm那么好用简单,或者号称世界上最好用的语言php的同学们也是非常的苦恼呢......
  • 如何用GORM向MySQL插入带有emoji
    最开始因为我根据网上的GORM连接MySQL教程,所以在代码中charset参数是写死的,如下:fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=True&loc=Local",a,b,c,d)......
  • django 搜索
    models.数据库名称.objects.filter(mobile='xx',id=xx) 效果等同于data_dict={"mobile":"xx","id": xx}mobile.数据库名称.objects.filter(**dat......
  • error MSB8020: The build tools for v142 (Platform Toolset = 'v142') cannot be fo
    多个VS版本编译报错:错误1errorMSB8020:Thebuildtoolsforv142(PlatformToolset='v142')cannotbefound.Tobuildusingthev142buildtools,pleaseinst......
  • Go defer
    defer//go语言提供了一个在函数执行完毕之后,执行指定的一系列代码的方法,这个方法就是通过defer这个关键字实现的//defer在某个函数中,有着一个专门存储defer的栈,当我们......
  • JavaFX Scene Builder 下载安装
    (JavaFXSceneBuilder下载安装)SceneBuilder是创建漂亮的用户界面,并将您的设计转化为交互式原型。SceneBuilder通过创建可以直接在JavaFX应用程序中使用的用户界面,缩......
  • Django-day01
    Django-day01创建Django工程django-adminstartproject工程名创建APPcd工程名pythonmanage.pystartappcmdb配置静态文件project.settings.pySTATICFILE......