Go 编译过程分析(一) -- 编译脚本

在本地机器编译 Golang 源码 阅读详情

    go 语言最近很火,与时俱进,我也看了看go 的语法。

    看起来 go 还是不错的,有很多新的feature。 就下载了代码研究了一下。

    go 的 src 目录下面存在三套编译文件:

  1. window 平台, 所有 bat 文件
  2. plan9 平台,所有 rc 文件
  3. unix 类平台,所有bash 文件

     以 unix 编译文件为例, go 的编译入口时在 src/all.bash , 这是一个bash 脚步, 这个脚步只是简单的调用了 make.bash 在脚步结束之后,调用 dist banner 输出编译的信息。 

set -e
if [ ! -f make.bash ]; then
        echo 'all.bash must be run from $GOROOT/src' 1>&2
        exit 1
fi
OLDPATH="$PATH"
. ./make.bash "$@" --no-banner
bash run.bash --no-rebuild
PATH="$OLDPATH"
$GOTOOLDIR/dist banner  # print build info

    dist 是在 make.bash 中生成的一个可执行文件,go 的所有编译都是在这个文件的控制下完成的。 个人认为这并不是一个好的设计,导致维护编译系统的成功过高,如果要修改一下编译选项,往往要修改 dist 源代码。dist 的代码在目录: /src/cmd/dist 下。

  dist 这个命令行程序支持如下几个参数:   

   "banner
Golang的编译过程概述 Golang为编译型语言,需要将源代码文件编译之后才能执行。可将Golang的编译过程视为构建Golang程序的第步,本文结合Golang编译器的源码简单介绍Golang的编译流程。 阅读详情

相关推荐

golang编译源代码和交叉编译方法

文章目录@[toc]golang编译源代码和交叉编译方法编译源代码编译go1.4编译go1.12交叉编译 golang编译源代码和交叉编译方法 编译源代码 golang编译其实很简单,下载份最新的源代码后,进入src目录运行all.bash即可, 但是你可能会遇到下面问题,这是因为现在golang都是用go语言编译的了,所以你的系统必须先安装好 >= go1.4 的版本. ./all.ba...

靑い空゛ 4123

Go的快速脚本语言-Golang开发

Tengo语言TengoGo种小型,动态,快速,安全的脚本语言。 Tengo是快速和安全的,因为它在本机Go中编写的基于堆栈的VM上被编译/执行为字节码。 / * Tengo语言Tengo语言TengoGo种小型,动态,快速,安全的脚本语言。 Tengo是快速和安全的,因为它在本机Go中编写的基于堆栈的VM上被编译/执行为字节码。 / * Tengo语言* / fmt:= import(“ fmt”)每个:= func(seq,fn){用于seq中的x {fn(x)}} sum:= func(init,seq){每个(seq ,func(x){init + = x})return init} fmt.println(sum(0,[1,2,3]))//“ 6” fmt.println(sum(“”,“,[1,2 ,3])))//“ 123”在腾中测试此Tengo代码

golang快速入门[4]-go语言如何编译为机器码

前文 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld 在上文中,我们详细介绍了第个helloworld程序 package main import "fmt" func ma...

weishixianglian的博客 3007

go脚本示例

这些是些简单的 Go 脚本示例,涵盖了不同的用途。您可以根据需要选择个或多个脚本来运行和学习。

m0_55877125的博客 750

Go的多端开发环境与编译器的搭建详解(图文)

通过正确设置和管理GOROOT、GOPATH和GOBIN,以及按照GOPATH目录约定的三个子目录组织项目,可以方便地进行Go语言项目的开发、编译和运行。同时,也可以更好地管理项目的依赖包和可执行文件,提高开发效率和代码的可维护性。GO111MODULE变量的作用是控制Go语言的模块支持,它的取值可以为off、on和auto。使用Go模块支持可以更方便、更灵活地管理依赖包,避免了传统的GOPATH目录约定和vendor目录管理的些问题,并提供了些其他的功能和特性。

SteveRocket's-Blog 2492

go程序的入门脚本-helloworld

环境准备 在Go Work 目录下建如下目录: E:\GoWork\src\s1\day01\hello s1: 表示第期班 day01: 表示第天的内容 hello:表示第个程序的名字 在hello下建个hi.txt文件,把后缀改成.go 代码部分 使用txt文本形式打开文件: //标识包 package main import "fmt" func main(){ fmt.Print("hello world") //这是个向终端屏幕打印内容的语法实现 /* 这是个多

互联网老辛 2983

Golang程序执行shell/php等其他脚本的方法

对于执行后立即可以获取结果的命令,可以使用cmd.Output执行;但对于执行后需要很长时间才能结束或不结束的命令,使用cmd.Output执行的话,会获取不到命令执行结果。原因:cmd.Output方法的逻辑是必须要等命令执行完成后才能获取结果。针对运行时间较长的命令,可以通过自定义的Stdout 属性来连续读取输出import ("os/exec""fmt""os"// 输出重定向到标准输出流(os.Stdout)// 执行命令if err!= nil {

sinat_34241861的博客 1358

Go项目键启动部署脚本

在服务器键部署打包项目

paterl的博客 925

[GO语言基础] .为什么我要学习Golang以及GO语言入门普及

作为网络安全初学者,会遇到采用Go语言开发的恶意样本。因此从今天开始从零讲解Golang编程语言,方面是督促自己不断前行且学习新知识;另方面是分享与读者,希望大家起进步。这系列文章入门部分将参考“尚硅谷”韩顺平老师的视频和书籍《GO高级编程》,详见参考文献,并结合作者多年的编程经验进行学习和丰富,且看且珍惜吧!后续会结合网络安全进行GO语言实战深入,驾驭~ 这些年我学过各种编程语言,从最早的C语言到C++,再到C#、PHP、JAVA,再到IOS开发、Python,到最新的GO语言,学得是真的杂。有时

杨秀璋的专栏 12万+

Golang源码分析Golang如何实现自举(

前言   在写篇文章之前,某位大佬勾起了我对学习这个主题的欲望。刚好那天带着病痛,后来根据个Makefile字符集的问题,拿着开始研究。发现研究、研究不疼了,果然和周星驰电影《国产凌凌漆》样精神麻醉才是最好的麻醉药。今年以来也没有给自己立啥学习目标,刚好研究Golang自举动,可以作为我今年的学习目标。该篇文章只是个开始,后续会继续迭代。   大家都知道在Go早起其实编译器并不是go去编写的,后期自举实现了编译。不过在学习Golang自举之前要了解Golan

c-rain 2679

Go 编译过程

• 在正常的 go build 流程开始前,如果项目中使用了自动插桩工具(如 opentelemetry-go-auto-instrumentation),会先对源代码进行预处理和注入代码。• go install:除了编译和链接源代码外,还会将生成的可执行文件放到 $GOPATH/bin 目录下,适用于长期安装和使用某些 Go 工具。在 Go 编译的最后阶段,所有的目标文件和库文件(包括 Go 标准库、第三方依赖库等)都会被链接成个单独的可执行文件或共享库。这个阶段会对源代码中的类型进行验证。

A_Tevens的博客 1143

golang编译过程

go编译的四个阶段 、词法分析与语法分析 1.词法分析 lex3是用于生成词法分析器的工具,lex 生成的代码能够将个文件中的字符分解成 Token 序列。 lexer 通过正则匹配的方式将机器原本很难理解的字符串进行分解成很多的 Token。 词法分析器Scanner:对输入的字符流进行扫描,最终解析成token。 2.语法分析器Parser 语法分析的输入就是词法分析器输出的 Token 序列,然后将编程语言的所有生产规则映射到对应的方法上,这些方法构成的树形结构最终会..

yanghaitao5000的博客 2749

Golang的编译过程

go语言的编译过程

ckckckcckckc的博客 915

GoLang之Go 编译链接过程概述(3)

GoLang之Go 编译链接过程概述(3)

weixin_52690231的博客 1048

Go语言的编译过程

Go 语言和Java语言样都是门需要编译才能运行的编程语言,也就是说代码在运行之前需要通过编译器生成二进制机器码。Go 语言编译器的源代码在目录中,目录下的文件共同组成了 Go 语言的编译器,而编译过程个多阶段的过程,它将源代码转换为机器代码。词法分析:将源代码分解为标记(token)。语法分析:将标记组合成语法结构。类型检查:检查语法结构是否符合Go语言的类型系统。代码生成:将语法结构转换为机器代码。链接:将机器代码链接成个可执行程序。

知道自己不要什么,不管多么大的诱惑(欢迎关注:职谷智享) 1956

go编译过程

源代码——编译器前端——优化器——编译器后端——目标程序编译器前端主要专注于理解源程序、扫描解析源程序并进行精准的语义表达。编译器的中间阶段(Intermediate Representation,IR)可能有多个,编译器会使用多个IR阶段、多种数据结构表示代码,并在中间阶段对代码进行多次优化。例如,识别冗余代码、识别内存逃逸等。编译器的中间阶段离不开编译器前端记录的细节。编译器后端专注于生成特定目标机器上的程序,这种程序可能是可执行文件,也可能是需要进步处理的中间形态obj文件、汇编语言等。

分享记录学习过程 1464

Golang源码编译

Golang官网有各种安装包,不需安装解压就可使用,但有时候想调试或自已修改代码就需要自已编译安装。Golang 1.4版本以前是用C写的,可以直接用GCC编译;但到了1.5就开始用GO写,再用GCC就没法编译,需要用GO编译GO!所以如果要编译1.5及以上版本就需要先编译个1.4版本的Go,或者直接下载各个版本的Go安装包。用这个编译好的Go编译我们需要源码安装的Go。 安装前准备: go...

风神韵 4794

Go编译原理系列二之编译过程

Go编译原理系列二之编译过程

weixin_52690231的博客 1560
上一篇: GoDaddy的成功不是偶然
下一篇: Leetcode - Two Sum
free2o
博客等级 码龄19年 59粉丝 97原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值