首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Go语言编译器的正确打开方式(一)- 从源码编译 go

  • 25-04-18 16:40
  • 4579
  • 13997
juejin.cn

写在前面

为什么实操编译器?

学习现代编译器原理时,你是否曾感到困惑?

书籍和文章虽然众多,但缺乏一个直观的例子来帮助理解。就像给了说明书却没有实际产品一样,让人一头雾水。

本系列给你递个梯子,带你一步步实际操作揭开Go语言编译器的神秘面纱。

即使没有很多编译器的知识,也可以阅读本系列。

为什么选择Go语言的编译器?

Go语言编译器是一个教科书般的实现。

不仅 Go 语言的编译器完全用 Go 语言本身来实现,链接器也是用Go语言写的。

而且Go 编译器里基本上使用的都是经典的算法。

更重要的是它提供了非常直观的工具将整个编译过程呈现给你。

相信有了Go语言的编译器做辅助,你对编译原理会有更深入的了解。

准备:从源码编译 go

Go语言的流行使得越来越多的人对它的感兴趣。

从源码编译是方便我们后续Debug调试跟踪Go源码。

具体步骤可以参考 go.dev/doc/install…

下载源码

clone go的代码到本地, 源码地址在github.com/golang/go.g…

bash
代码解读
复制代码
git clone https://github.com/golang/go.git

选择合适的Go版本

接下来,我们需要选择一个特定的Go版本进行编译,这里以 go1.21.11 版本为例

bash
代码解读
复制代码
git checkout go1.21.11

编译

注意从源码编译go所要求的最低版本

The minimum version of Go required depends on the target version of Go:

  • Go <= 1.4: a C toolchain.
  • 1.5 <= Go <= 1.19: a Go 1.4 compiler.
  • 1.20 <= Go <= 1.21: a Go 1.17 compiler.
  • 1.22 <= Go <= 1.23: a Go 1.20 compiler.
  • Going forward, Go version 1.N will require a Go 1.M compiler, where M is N-2 rounded down to an even number. Example: Go 1.24 and 1.25 require Go 1.22.

然后执行src目录下的all.bash

Building Go cmd/dist using /opt/golang/go1.21.11. (go1.21.11 darwin/arm64) Building Go toolchain1 using /opt/golang/go1.21.11. Building Go bootstrap cmd/go (go_bootstrap) using Go toolchain1. Building Go toolchain2 using go_bootstrap and Go toolchain1. Building Go toolchain3 using go_bootstrap and Go toolchain2. Building packages and commands for darwin/arm64.

执行完成后,会生在bin目录下生成go和gofmt两个可执行文件,当前go目录可以做为GOROOT使用。

注:本文转载自juejin.cn的航哥的文章"https://juejin.cn/post/7494078158217904155"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

103
后端
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top