- 前言
- Go 与操作系统
- Go 内部机制
- Go 基本数据类型
- 4 组合类型的使用
- 5 数据结构
- 6 Go package 中不为人知的知识
- 7 反射和接口
- 8 Go UNIX 系统编程
- 08.1 关于 UNIX 进程
- 08.2 flag 包
- 8.2 flag 包
- 08.3 io.Reader 和 io.Writer 接口
- 08.4 bufio 包
- 08.5 读取文本文件
- 08.6 从文件中读取所需的数据量
- 08.7 为什么我们使用二进制格式
- 08.8 读取 CSV 文件
- 08.9 写入文件
- 08.10 从磁盘加载和保存数据
- 08.11 再看strings包
- 08.12 关于bytes包
- 08.13 文件权限
- 08.14 处理 Unix 信号
- 08.15 Unix 管道编程
- 08.16 遍历目录树
- 08.17 使用 ePBF
- 08.18 关于 syscall.PtraceRegs
- 08.19 跟踪系统调用
- 08.20 User ID 和 group ID
- 08.21 其他资源
- 08.22 练习
- 08.23 总结
- 9 并发 Goroutines、Channel 和 Pipeline
- 10 Go 并发-进阶讨论
- 11 代码测试、优化及分析
- 12 Go 网络编程基础
- 13 网络编程 - 构建服务器与客户端
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
02.2 编译器
Go 编译器
Go编译器需要在 go tool
的帮助下执行。 go tool
除了生成可执行文件之外还有很多其他功能。
本章节中使用的 unsafe.go
文件不包含任何特殊代码-所提供的命令将适用于每个有效的Go源文件。接下来你将会看到 unsafe.go
的内容。
如果你使用 go tool compile
命令编译 unsafe.go
文件,会得到一个扩展名为.o
的目标文件。下面的展示这个命令在macOS操作系统中执行的结果:
> $ go tool compile unsafe.go
> $ ls -l unsafe.o
> -rw-r--r-- 1 mstouk staff 5495 Oct 30 19:51 unsafe.o
> $ file unsafe.o
> unsafe.o: data
目标文件是包含了目标代码的二进制文件,它以可重定位格式的形式展现,很多时候不能被直接执行。可重定位格式的最大好处是在链接阶段它需要尽可能少的内存。
如果执行 go tool compile -pack
命令,将会得到一个压缩文件。
$ go tool compile -pack unsafe.go $ ls -l unsafe.a -rw-r--r-- 1 mtsouk staff 5680 Oct 30 19:52 unsafe.a $ file unsafe.a unsafe.a: current ar archive
压缩文件也是一个二进制文件,但是它包含了一个或者多个文件,主要的目的是把多个文件组织到单个文件中。Go使用的压缩文件被称为 ar
。
使用下面的命令可以列出.a
压缩文件的内容:
$ ar t unsafe.a __.PKGDEF _go_.o
go tool compile
的另一个真正有价值的命令行标志是-race
,它允许您检测竞态条件。在第十章中你会学到更多关于竞态条件以及为什么要避免竞态条件的知识点。
本章的最后讨论汇编语言和节点树的时候,你还会学到 一个同样有用的 go tool compile
命令。现在为了撩动你,尝试一下下面的命令吧:
$ go tool compile -S unsafe.go
你可能发现,以上命令的输出会让你难以理解,这正说明了Go可以很好地帮你隐藏不必要的复杂性,除非你要求Go展示出来。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论