走进Golang之编译器原理

为了学好Golang底层知识装逼,折腾了一下编译器相关知识。下面的内容并不会提升你的生产技能点,但可以提高你的装逼指数。请按需进入!

本文目录速览:

认识 go build

当我们敲下 go build 的时候,我们的写的源码文件究竟经历了哪些事情?最终变成了可执行文件。

这个命令会编译go代码,今天就来一起看看go的编译过程吧!

首先先来认识以下go的代码源文件分类

  • 命令源码文件:简单说就是含有 main 函数的那个文件,通常一个项目一个该文件,我也没想过需要两个命令源文件的项目
  • 测试源码文件:就是我们写的单元测试的代码,都是以 _test.go 结尾
  • 库源码文件:没有上面特征的就是库源码文件,像我们使用的很多第三方包都属于这部分

go build 命令就是用来编译这其中的 命令源码文件 以及它依赖的 库源码文件。下面表格是一些常用的选项在这里集中说明以下。

可选项 说明
-a 将命令源码文件与库源码文件全部重新构建,即使是最新的
-n 把编译期间涉及的命令全部打印出来,但不会真的执行,非常方便我们学习
-race 开启竞态条件的检测,支持的平台有限制
-x 打印编译期间用到的命名,它与 -n 的区别是,它不仅打印还会执行

接下来就用一个 hello world 程序来演示以下上面的命令选项。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RzRQoOtc-1573696152676)(https://dayutalk.cn/img/go-byq-0.png)]

如果对上面的代码执行 go build -n 我们看一下输出信息:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E4jG2DkH-1573696152677)(https://dayutalk.cn/img/go-byq-1.png)]

来分析下整个执行过程

编译器编译过程

这一部分

最低0.47元/天 解锁文章
golang编译器
02-20
golang编译器(wip) 一小部分C ++编译器,仅使用Go编写的int和int *类型
golang编译原理
qq_38461475的博客
07-18 1411
预备知识 1. AST(抽象语法树) *AST是源代码语法的结构的一种抽象表示,它用树状的方式表示编程语言的语法结构1。抽象语法树中的每一个节点都表示源代码中的一个元素,每一颗子树都表示一个语法元素,例如一个 if else 语句,我们可以从23 + 7这一表达式中解析出下图所示的抽象语法树。** 辅助编译器进行语义分析 2.静态单赋值(Static Single Assignment, SSA) SSA是中间代码的一个特性,如果一个中间代码具有静态单赋值的特性,那么每个变量就只会...
「GO基础」在Windows上安装Go编译器并配置Golang开发环境
最新发布
stormsha
04-14 1534
本文将详细介绍如何在Windows操作系统上安装Go编译器,并逐步指导用户设置Golang开发环境。内容包括下载和安装Go编译器、配置系统环境变量、创建工作空间以及编写和运行第一个Go程序等步骤,帮助初学者快速上手Golang开发。
小米技术出品——走进Golang编译器原理
Go中国
11-18 922
本文来自小米信息技术团队,作者为小米信息技术部海外商城组何磊1. 认识 go build当我们敲下go build的时候,我们写的源码文件究竟经历了哪些事情,最终变成...
golang编译过程
yanghaitao5000的博客
07-19 2430
go编译的四个阶段 一、词法分析与语法分析 1.词法分析 lex3是用于生成词法分析器的工具,lex 生成的代码能够将一个文件中的字符分解成 Token 序列。 lexer 通过正则匹配的方式将机器原本很难理解的字符串进行分解成很多的 Token。 词法分析器Scanner:对输入的字符流进行扫描,最终解析成token。 2.语法分析器Parser 语法分析的输入就是词法分析器输出的 Token 序列,然后将编程语言的所有生产规则映射到对应的方法上,这些方法构成的树形结构最终会..
Golang编译过程
weixin_42782833的博客
11-30 564
golang
Golang编译器介绍
09-20
今天小编就为大家分享一篇关于go语言编译器的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
golang编译器win64
12-01
golang官网被墙,分享下安装文件,附带转载教程 https://www.cnblogs.com/franklee97/archive/2017/07/06/7125426.html
golang-cross:使用CGO的golang交叉编译器
03-31
戈朗克罗斯 Docker容器可对包含cgo支持的go软件包进行交叉编译... 建立跨语言的图像docker build --build-arg GO_VERSION=1.16.2 --build-arg GOLANG_DIST_SHA=542e936b19542e62679766194364f45141fde55169db2d8d01046
golang-docker-crosscompiler:Golang 交叉编译器 Docker 镜像
06-04
Golang 交叉编译器 Docker 镜像 docker run -v $GOPATH:/go -w "/go${PWD#$GOPATH}" jamesandariese/go-darwin-amd64:1.4.2 build -o $(basename $PWD).darwin-amd64为其他架构构建东西。 不管你来自哪个拱门。 只要...
Golang编译原理
Jogger_Ling的专栏
04-06 421
通过 cloc 工具先统计一下go的源码 /root/.gvm/gos/go1.13.5/src/ 150万行go代码 1.1.2 中间代码# 生成汇编代码 go build -gcflags -S main.go 获得ssa,可以看到汇编语言的优化过程 GOSSAFUNC=main go build main.go ...
LlamaLangGo:使用GoLang制作的LlamaLang编译器
03-11
骆马郎 定义此语言时要考虑到游戏开发。 还尝试标准化一些实现细节,因此与c ++相比,许多其他实现在它们之间是兼容的。 我深受乔纳森·布鲁斯(Jonathan Blows)语言Jai的启发。 特征: 像Java这样的注释。 语法Go / TypeScript启发。 反射 编译时间函数执行。 内存管理完全由程序员决定。 强类型。 已编译。 有关语言定义,请参见 。 实施细节 该编译器是使用带有Go目标的ANTLR v4制作的。 它针对LLVM IR,因此可以针对LLVM支持的每种硬件进行编译,并具有调试功能。 例子 可以在“ examples”文件夹中找到语法示例。 支持的IDE 到目前为止,尚无任何支持,但这些是按优先顺序排列的未来目标: Visual Studio程式码 视觉工作室 于23/12/2020开始
Golang 编译原理 计算器(通俗易懂)
weixin_43086579的博客
01-14 930
本文不需要你掌握任何编译原理的知识。 只需要看懂简单的golang语言即可, 完整的代码示例在GIT 听到编译原理,就觉得很高大上。记得上大学时,这门课要记忆一些BNF,LEX,AST,CFG这些有的没的。一个听不懂,二个没兴趣。随着使用了几门语言之后,也尝试用编译原理的基本知识写过一个sql转es的工具之后。发现其实了解一点点编译原理的知识,能够提高我们...
golang编译原理初识
abcnull 的博客
08-31 497
文章目录关于编译器词法分析语法分析类型检查生成 SSA 中间代码生成机器代码总结 关于编译器 编译器本质就是一个翻译器,作用是将一个高级语言翻译成计算机可以识别的机器语言,如今的编译器都是分层架构,分层可以增加各层之间的独立性。golang 编译器分为前端和后端 编译器种类: 本地编译器:可以编译生成所在计算机系统相同平台可执行的目标代码 交叉编译器:可生成在其他平台上可执行的目标代码 golang 编译器主要编译阶段: 1.词法分析 => 2.语法分析 => 3.类型检查 => 4.
【后端教程】走进Golang编译器原理
weixin_47143210的博客
04-19 470
目录如下: 认识 go build 编译器原理 词法分析 语法分析 语义分析 中间码生成 代码优化 机器码生成 总结 认识 go build 当我们敲下 go build 的时候,我们写的源码文件究竟经历了哪些事情?最终变成了可执行文件。 这个命令会编译go代码,今天就来一起看看go的编译过程吧! 首先先来认识一下go的代码源文件分类 命令源码文件:简单...
Golang的编译过程
ckckckcckckc的博客
10-15 743
go语言的编译过程
从零带你学习Go语言:20、 Go 编译原理
weixin_54707168的博客
05-04 536
Go的编译过程会经过以下几个步骤 前端: 1. 词法分析 2. 语法分析 3. 类型检查 4. 中间代码生成 后端: 5. 目标代码生成 6. 机器码优化
字节跳动青训营Day04 - Go编译器优化
大河之犬的博客
05-14 563
将被调用函数的函数体的副本替换到调用位置上,同时重写代码以反映参数的绑定。
golang编译器 是怎么实现的
06-10
Golang编译器是由 Go 语言自己实现的,它也是 Golang 语言的核心组成部分之一。Golang编译器主要分为前端和后端两个部分。 前端负责将 Golang 源代码转换成中间代码(IR),同时进行语法分析、类型检查等操作。前端还会将代码进行优化,以提高程序的性能。 后端负责将中间代码转换成机器码,同时进行代码优化,以减少程序的运行时间和内存占用。后端还会将生成的机器码进行链接,生成可执行程序。 Golang编译器采用了自适应编译技术,即在运行时根据程序的执行情况对机器码进行优化,以提高程序的性能。同时,Golang编译器还支持交叉编译,即在一台机器上编译出可以在其他平台上运行的程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • app后端开发一:swagger-ui教程-构建api接口文档工具 48905
  • Web开发中,什么级别才算是高并发 38634
  • vagrant系列一:vagrant的安装与初识 35020
  • 配置redis外网可访问 32660
  • CentOS下安装XAMPP详细教程 25459

分类专栏

  • Java学习 4篇
  • PHP开发 70篇
  • laravel5学习笔记 12篇
  • 支付宝、微信支付接入 19篇
  • web前端框架 2篇
  • 编程路上的瞎扯 20篇
  • c/c++ 4篇
  • 嵌入式 4篇
  • 生活札记 2篇
  • NoSql学习 6篇
  • app开发 6篇
  • 环境搭建 8篇
  • python学习 1篇
  • go 6篇

最新评论

  • 走进Golang之编译器原理

    qq_32236925: 牛,感谢大佬的分享

  • Payment:支付的回调统一处理

    m0_66248884: 公众号搜不到

  • Web开发中,什么级别才算是高并发

    xj777: 我觉得要看机器cpu的核数或者线程能力,假如机器是4核的,理论理想环境下可以一次处理4个并发,所以要乘以4

  • Web开发中,什么级别才算是高并发

    Dw Dw阿光: 为什么*0.3

  • 专注与财富

    不吃西红柿丶: 很不错分享~ 进步的路上一起努力!期待您的关注哈。

大家在看

  • C-数据结构-静态库
  • 玩转STM32-数模转换器ADC(详细-慢工出细活)
  • 探秘萤瓴优选短视频带货软件,开启新时代的电商创业方式
  • github网站加速 使用技巧 748
  • 深入理解Java的设计模式

最新文章

  • 业务系统稳定性建设思路
  • Go的方法接收者:值接收者与指针接收者
  • 电商商品系统的演进分析
2023年1篇
2022年2篇
2021年1篇
2020年12篇
2019年9篇
2018年9篇
2017年21篇
2016年26篇
2015年49篇
2014年4篇
2013年8篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源99ting坂上智代tap加速器超级娱乐王朝免费八字起名子打分赵锡军走过那一个拐角奥术神座无弹窗宝宝起乳名生肖猪宝宝赵起名字大全女孩为什么钶字起名不能用服装公司起名子皇马vs多特百客鬼4忌起名字大全女孩打分测试打分表玩世不恭是什么意思华能吧手机起名字软件免费版飞虎出征怎么给出生小孩起名字电视剧突围全部演员表cctv5无插件直播房产中介起什么名字合唱团起名大全集霸气科比退役最后一场比赛回眸过去男宝起名起名使用的好字有哪些西宁起名淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化