老年人编译系列-go cmd/dist源码
dist是用来编译go语言的工具,而且dist本身是由go语言写的
所以可以用低版本的go编译dist, 再用dist编译高版本的go
/src/cmd/dist是go dist工具的代码目录
main.go中的main为入口函数
主要的流程为
- 检测操作系统
- 检测系统架构
- bginit() //启动一组后端运行的goroutine, 用于在后台运行go
- xinit() //初始化全局变量/状态
- xmain() //执行全局commands变量中存储的操作
- xexit() //资源检查/进程退出
查看usage()函数可知
func usage() {
xprintf(`usage: go tool dist [command]
Commands are:
banner print installation banner
bootstrap rebuild everything
clean deletes all built files
env [-p] print environment (-p: include $PATH)
install [dir] install individual directory
list [-json] list all supported platforms
test [-h] run Go test(s)
version print Go version
All commands take -v flags to emit extra information.
`)
xexit(2)
}
查看commands的定义
// commands records the available commands.
var commands = map[string]func(){
"banner": cmdbanner,
"bootstrap": cmdbootstrap,
"clean": cmdclean,
"env": cmdenv,
"install": cmdinstall,
"list": cmdlist,
"test": cmdtest,
"version": cmdversion,
}
着重看cmdbootstrap流程
cmdbootstrap流程中
- 检查rebuildall, debug, nobanner三个参数
- setup() //初始化变量
- checkCC() //检查C++编译器
- bootstrapBuildTools() //编译bootstrap工具链,主要的目录都列在了bootstrapDirs变量中
- install("runtime")
- install("cmd/go")
- goInstall(goBootstrap, append([]string{"-i"}, toolchain...)...)
- goInstall(goBootstrap, append([]string{"-a", "-i"}, toolchain...)...)
- goInstall(goBootstrap, targets...)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
【Redis&MongoDB 社区大群】往期直播内容合辑(持续更新)
为满足广大开发者对更多数据库产品的学习需求,我们特别新建了Redis&MongoDB社区交流群,邀请多位阿里数据库专家入驻,为广大云用户提供专业的技术分享及回答,定期在国内开展线下技术沙龙,专家技术直播,欢迎大家加入! Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品
-
下一篇
DTCC 2019 | 海量数据毫秒级分析的背后——《阿里超大规模实时数仓架构挑战与实践解析》
摘要:在DTCC 2019大会上,阿里云智能数据库产品事业部研究员林亮进行了题为《超大规模实时数仓架构挑战与实践解析》的分享,数据分析领域目前正在朝着在线化方向演进,数据业务在海量数据实时写入、高并发分析、稳定性、灵活性上挑战巨大。分析型数据库AnalyticDB是阿里巴巴自主研发的超大规模PB级实时数据仓库,本次演讲深入分析了AnalyticDB海量数据毫秒级分析背后的架构挑战以及工程实践。 阿里云智能数据库产品事业部研究员林亮(花名:意博) 专家简介:林亮(花名:意博),阿里云智能数据库产品事业部研究员,曾就职Google十多年,在超大规模SQL Engine和规模存储引擎上经验丰富。目前在负责阿里云PB级分析型数据库AnalyticDB架构工作。 直播回放 链接:https://yq.aliyun.com/live/1047 议题PP
相关文章
文章评论
共有0条评论来说两句吧...