RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
使用go语言编译,go语言编译器手机版

Go 是怎么使用 Go 来编译自身的

是Go语言吗?

创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、成都做网站、巢湖网络推广、小程序定制开发、巢湖网络营销、巢湖企业策划、巢湖品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供巢湖建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

Go 编译过程 九个步骤

第一步. all.bash

% cd $GOROOT/src

% ./all.bash

第一步 all.bash 只是调用了另外两个 shell 脚本:make.bash 和run.bash。若使用 Windows 或 Plan 9,其过程也基本类似,只是脚本分别以 .bat 或 .rc 结尾。在文章的其他部分,请用适当的操作系统对应的扩展来补全命令。

第二步. make.bash

. ./make.bash --no-banner

make.bash 作为 all.bash 内容的一部分,如果它退出也会中断构建过程

第三步. cmd/dist

gcc -O2 -Wall -Werror -ggdb -o cmd/dist/dist -Icmd/dist cmd/dist/*.c

当健全检查完成后,make.bash 开始编译 cmd/dist。

第四步. go_bootstrap

现在 go_bootstrap 已经构建完成,make.bash 的最后一步是使用 go_bootstrap 编译完整的 Go 标准库,包括一个完整的 go 工具用以替换。

echo "# Building packages and commands for $GOOS/$GOARCH."

"$GOTOOLDIR"/go_bootstrap install -gcflags "$GO_GCFLAGS" \

-ldflags "$GO_LDFLAGS" -v std

第五步. run.bash

现在 make.bash 已经完成,回到 all.bash 的执行,这会调用 run.bash。run.bash 的任务是编译和测试标准库、运行时以及语言测试集。

bash run.bash --no-rebuild

由于 make.bash 和 run.bash 都会调用 go install -a std,因此需要使用 –no-rebuild 标志来避免重复前面的步骤,–no-rebuild 跳过了第二个 go install。

# allow all.bash to avoid double-build of everythingrebuild=trueif [ "$1" = "--no-rebuild" ]; then shiftelse echo '# Building packages and commands.' time go install -a -v std echofi

第六步. go test -a std

echo '# Testing packages.'

time go test std -short -timeout=$(expr 120 \* $timeout_scale)s

echo

接下来 run.bash 会在标准库里所有的包上来运行用 testing 包编写的单元测试。由于 $GOPATH 和 $GOROOT 中有着相同的命名空间,所以不能直接使用 go test … 否则 $GOPATH 中的每个包也会被逐一测试,因此创建了一个用于标准库中的包的别名:std。由于一些测试需要比较长的时间,且会消耗大量内存,因此用 -short 标志对一些测试进行了过滤。

第七步. runtime 和 cgo 测试

run.bash 接下来的部分会运行平台对 cgo 支持的测试,执行一些性能测试,并且编译一些伴随 Go 发行版一起的杂项程序。随着时间的流逝,这些杂项程序的清单会越来越长,那么它们也就会不可避免的被从编译过程中悄悄剥离出去。

第八步. go run test

(xcd ../test

unset GOMAXPROCS

time go run run.go

) || exit $?

run.bash 的倒数第二步会调用在 $GOROOT 下的 test 目录里的编译器和运行时的测试。他们是对于编译器和运行时自身的,较为低级细节的测试。会执行语言规格测试,test/bugs 和 test/fixedbugs 子目录保存有那些已经被发现并被修复的问题的独立的测试。驱动测试的是一个小 Go 程序 $GOROOT/test/run.go,会执行 test 目录里的每个 .go 文件。一些 .go 文件的首行包含了指导 run.go 对结果作出判断的指令,例如,程序将会失败,或提供一个确定的输出队列。

第九步. go tool api

echo '# Checking API compatibility.'

go tool api -c $GOROOT/api/go1.txt,$GOROOT/api/go1.1.txt \

-next $GOROOT/api/next.txt -except $GOROOT/api/except.txt

run.bash 的最后一步调用了 api 工具。

golang项目中使用条件编译

golang中没有类似C语言中条件编译的写法,比如在C代码中可以使用如下语法做一些条件编译,结合宏定义来使用可以实现诸如按需编译release和debug版本代码的需求

build tags 是通过代码注释的形式实现的,要写在文件的最顶端;

go build指令在编译项目的时候会检查每一个文件的build tags,用来决定是编译还是跳过该文件

build tags遵循以下规则

示例:

约束此文件只能在支持kqueue的BSD系统上编译

一个文件可能包含多行条件编译注释,比如:

约束该文件在linux/386 或 darwin/386平台编译

需要注意的点

正确的写法如下:

编译方法:

具有_$GOOS.go后缀的go文件在编译的时候会根据当前平台来判断是否将该文件导入并编译;同样适用于处理器架构判断 _$GOARCH.go。

两者可以结合起来使用,形式为: _$GOOS_$GOARCH.go

示例:

文件名必须提供,如果只由后缀的文件名会被编译器忽略,比如:

这两个文件会被编译器忽略,因为以下划线开头的文件都会被忽略

GO语言如何编译发布到Linux

在命令行执行如下指令

SET CGO_ENABLED=0

SET GOOS=linux

SET GOARCH=amd64

go build main.go  //开始编译程序

Go语言编译成aar并调试

go及gomobile的环境配置这里就不介绍了,直接说aar的生成和使用。

1. 设置环境变量GOPATH

GOPATH的值可以有多个,用半角分号间隔,但不能以其结束,设置完成后需要重新做 gomobile init 。

2. 在GOPATH里创建src文件夹,用于存放go的包和源文件

3. 在src中创建hello文件夹(go文件的包名)

4. 在hello中创建hello.go文件,并输入内容

5. 编译

执行命令: gomobile bind -target=android hello

会生成一个hello.aar文件

6. 导入到android工程

将hello.aar文件放入工程的libs中,并配置build.gradle

在根结点加入:

在dependencies结点下加入依赖:

7. 在Java中测试

运行后,结果会输出 Hello, Android and Gopher

Go语言编译器TinyGo,基于LLVM,在微控制器和小系统上编译和运行

TinyGo是一个为微控制器、WebAssembly(Wasm)和命令行工具等小型场景设计的Go语言编译器。TinyGo重用了Go语言工具和LLVM使用的库,以编译用Go语言编写的程序。目前,该项目在GitHub上已经积累了10.1k的Star。

如下为一个示例程序,当运行在任何支持的带板载LED的主板上时,则会点亮内置LED。

上述程序可以在单片机、Adafruit ItsyBitsy M0微控制器或任何支持的带内置LED的板上进行编译和不需要修改的运行,只要设置正确的TinyGo编译器目标即可。例如,设置如下目标可以编译和点亮 单片机。

项目概述

TinyGo项目旨在将Go语言引入到具有单进程或核心的微控制器和小系统。TinyGo类似于emgo,但主要的区别在于作者想要保留Go内存模型。另一个区别在于TinyGo在内部使用LLVM,因而可以获得更小更高效的代码以及更高的灵活性。

创建TinyGo项目的初衷是,如果Python可以在微控制器上运行,Go语言当然也应该能够在更低级微设备上运行。

支持设备

你可以为微控制器、WebAssembly和Linux编译TinyGo程序。目前,TinyGo支持以下85种微处理器板。

更多技术细节请参阅原项目。

为什么要使用 Go 语言?Go 语言的优势在哪里

1、学习曲线

它包含了类C语法、GC内置和工程工具。这一点非常重要,因为Go语言容易学习,所以一个普通的大学生花一个星期就能写出来可以上手的、高性能的应用。在国内大家都追求快,这也是为什么国内Go流行的原因之一。

2、效率

Go拥有接近C的运行效率和接近PHP的开发效率,这就很有利的支撑了上面大家追求快速的需求。

3、出身名门、血统纯正

之所以说Go语言出身名门,是因为我们知道Go语言出自Google公司,这个公司在业界的知名度和实力自然不用多说。Google公司聚集了一批牛人,在各种编程语言称雄争霸的局面下推出新的编程语言,自然有它的战略考虑。而且从Go语言的发展态势来看,Google对它这个新的宠儿还是很看重的,Go自然有一个良好的发展前途。我们看看Go语言的主要创造者,血统纯正这点就可见端倪了。

4、组合的思想、无侵入式的接口

Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持。Go语言支持当前所有的编程范式,包括过程式编程、面向对象编程以及函数式编程。

5、强大的标准库

这包括互联网应用、系统编程和网络编程。Go里面的标准库基本上已经是非常稳定,特别是我这里提到的三个,网络层、系统层的库非常实用。

6、部署方便

我相信这一点是很多人选择Go的最大理由,因为部署太方便,所以现在也有很多人用Go开发运维程序。

7、简单的并发

它包含降低心智的并发和简易的数据同步,我觉得这是Go最大的特色。之所以写正确的并发、容错和可扩展的程序如此之难,是因为我们用了错误的工具和错误的抽象,Go可以说这一块做的相当简单。

8、稳定性

Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切。那么为什么Go相比于其他程序会更稳定呢?这是因为Go提供了软件生命周期的各个环节的工具,如go

tool、gofmt、go test。


新闻名称:使用go语言编译,go语言编译器手机版
网址分享:http://scyingshan.cn/article/dssiejs.html