常用作编译命令行指定的单个go源码包。会生成一个以文件.o为后缀的目标文件,其文件名与包内第一个源文件的文件名相同。 目标文件可以与其他对象组合成一个包档案或直接传递给链接器(go tool link)。如果使用-pack调用,编译器会直接写入一个档案(archive),绕过中间目标文件。

生成的文件包含有关由包导出的符号的类型信息,以及包使用的从其他包导入的符号使用的类型。因此,在编译包P的客户端C读取P的依赖关系文件时,不需要编译P的输出。

命令行

go tool compile [flags] file...

指定的文件必须是Go源文件和同一个包下的其他部分。所有目标操作系统和体系结构都使用相同的编译器。 GOOS和GOARCH环境变量设置了所需的属性。

-D path
设置本地导入的相对路径。
-I dir1 -I dir2
在dir1,dir2等文件夹搜索导入的包,
会先查询 $GOROOT/pkg/$GOOS_$GOARCH.
-L
在错误消息中显示完整的文件路径。
-N
禁用优化。
-S
将汇编列表打印到标准输出(仅限代码)。
-S -S
将汇编列表打印到标准输出(代码和数据)。
-V
打印编译器版本并退出。
-asmhdr file
将汇编头写入文件。
-blockprofile file
编写用于编译到文件的块配置文件。
-complete
假设软件包没有非Go组件。
-cpuprofile file
编写用于编译文件的CPU配置文件。
-dynlink
允许引用共享库中的Go符号(实验性功能)。
-e
移除报告错误数量限制(默认限制为10)。
-h
在检测到第一个错误时暂停堆栈跟踪。
-importmap old=new
在编译过程中将导入“旧”解释为导入“新”。
该选项可以重复添加。
-installsuffix suffix
在 $GOROOT/pkg/$GOOS_$GOARCH_suffix 查找包
而非 $GOROOT/pkg/$GOOS_$GOARCH.
-l
禁用内联。
-largemodel
生成假定大内存模型的代码。
-linkobj file
将链接器特定的对象写入文件和编译器特定的对象
对象到通常的输出文件(由-o指定)。
没有这个标志,-o输出是两者的组合
链接器和编译器输入。
-memprofile file
写入内存配置文件。
-memprofilerate rate
设置 runtime.MemProfileRate 调整编译速度。
-msan
将调用插入到C/C++内存清理程序。
-mutexprofile file
编写用于编译文件的互斥量配置文件。
-nolocalimports
禁止本地(相对)导入。
-o file
将目标写入文件(默认file.o或与-pack,file.a)。
-p path
为正在编译的代码设置期望的包导入路径,
并诊断会导致循环依赖的导入。
-pack
编写一个包(归档)文件而不是一个目标文件
-race
编译启用竞争检测器。
-trimpath prefix
从记录的源文件路径中删除前缀。
-u
禁止导入未标记为安全的软件包;意味着 -nolocalimports.

还有一些调试标志;运行该命令时没有使用消息的参数。

编译指令

编译器在行的开头以//注释的形式接受编译器指令。为了将它们与非指令注释区分开来,指令在斜线和指令名称之间不需要空格。但由于它们是注释,不知道指令约定或特定指令的工具可以像跳过其他注释一样跳过指令。

//line path/to/file:linenumber

//line指令指定后面的源代码行应该被记录为来自给定的文件路径和行号。连续的行使用递增的行号记录,直到下一个指令。该指令通常出现在机器生成的代码中,因此编译器和调试器将在生成器的原始输入中显示行。

//line指令是一个历史的特例;所有其他指令的格式为//go:name,表示该指令是由Go工具链定义的。

//go:noescape

//go:noescape指令指定文件中的下一个声明,它必须是一个没有body的func(意思是它有一个不用Go编写的实现),不允许任何作为参数传递的指针转义到堆或从函数返回的值。在调用函数的Go代码的编译器转义分析期间,可以使用这些信息。

//go:nosplit

//go:nosplit指令指定文件中声明的下一个函数不能包含堆栈溢出检查。在调用goroutine被抢占的时候,调用低级运行时源的情况最为常见。

//go:linkname localname importpath.name

//go:linkname指令指示编译器使用“importpath.name”作为源代码中声明为“localname”的变量或函数的目标文件符号名称。因为这个指令可以颠覆类型系统和包模块化,所以只有在导入 unsafe 包的文件中才能使用。

最新文章

  1. 将Unreal4打包后的工程嵌入到Qt或者桌面中
  2. php使用curl 检测socks5 代理的可用性
  3. table-responsive响应式表格,HTML表格自适应,bootstrap2表格自适应
  4. 关于内存泄露分析插件 MAT 的用法
  5. 【fedora】制作安装u盘
  6. Jdk1.8+Eclipse+MySql+Tomcat开发Java应用的环境搭建
  7. CSS 3的display:盒类型详解
  8. Mysql优化相关总结
  9. Monkey 命令使用说明
  10. 关于使用JavaScript实现图片点击切换(附带改变导航图片 方案二)
  11. ATS缓存数据结构
  12. Beta冲刺NO.6
  13. 启动Eclipse时An internal error occurred during: "Initializing Java Tooling".错误
  14. Jquery mobile动态生成ListView调用刷新方法报错
  15. node.js学习4--------------------- 根据不同路径来响应内容,以及中文乱码的解决
  16. Kali学习笔记28:Burpsuite(下)
  17. vs code安装
  18. underscore.js源码解析【数组】
  19. sql cast,convert,QUOTENAME,exec 函数学习记录
  20. Python 简单的远程执行命令

热门文章

  1. visdom 简单使用
  2. Http Header的Transfer-Encoding
  3. mosquitto配置文件
  4. sql server 列字段拼接 —— STUFF
  5. 网上售卖几百一月的微信机器,Python几十行代码就能搞定
  6. 如何使用npm的部分用法以及npm被墙的解决方法
  7. JS原生对象实现异步请求以及JQ的ajax请求四种方式
  8. 采坑 - LODOP,打印预览
  9. 使用Socket下载图片
  10. Linux中的硬链接和软链接的概念、区别及用法