开发者社区> 大喵Schnitzel> 正文

老年人编译系列-go cmd/dist源码

简介: dist是用来编译go语言的工具,而且dist本身是由go语言写的所以可以用低版本的go编译dist, 再用dist编译高版本的go/src/cmd/dist是go dist工具的代码目录main.go中的main为入口函数主要的流程为 检测操作系统 检测系统架构 bginit() //启...
+关注继续查看

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()
  • bootstrapBuildTools()
  • install("runtime")
  • install("cmd/go")
  • goInstall(goBootstrap, append([]string{"-i"}, toolchain...)...)
  • goInstall(goBootstrap, append([]string{"-a", "-i"}, toolchain...)...)
  • goInstall(goBootstrap, targets...)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
14237 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
19214 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
28478 0
老年人编译系列-go cmd/dist源码
dist是用来编译go语言的工具,而且dist本身是由go语言写的所以可以用低版本的go编译dist, 再用dist编译高版本的go/src/cmd/dist是go dist工具的代码目录main.go中的main为入口函数主要的流程为 检测操作系统 检测系统架构 bginit() //启...
790 0
老年人编译系列-go cmd/dist源码
dist是用来编译go语言的工具,而且dist本身是由go语言写的所以可以用低版本的go编译dist, 再用dist编译高版本的go/src/cmd/dist是go dist工具的代码目录main.go中的main为入口函数主要的流程为 检测操作系统 检测系统架构 bginit() //启...
709 0
基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案
基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案           两个月前做C++课设的时候,电脑编译器编译结果出现了中文乱码,寻求了百度和大神们,都没有解决这个问题,百度上一堆解释是对编译器进行设置之类的,结果没有一个有效果,暑假学习了用Dos来开发Java程序,输入...
1284 0
QC-LDPC码的译码结构 | 带你读《5G-NR信道编码》之十一
LDPC 译 码 的 调 度 方 式 大 体 有 两 种: 泛 滥 式(Flooding) 和 分 层 式 (Layered)。泛滥式的特点是在每一次译码迭代,先计算从变量节点到校验节 点的所有软信息,然后计算从校验节点到变量节点的所有软信息。泛滥式的调 度比较适合下面介绍的全并行结构,通常用于计算机模拟仿真。
1829 0
4
文章
29
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载