Go on ARM 以及移植计划

来源: OSCHINA
编辑: 局长
2020-12-24

Go 团队核心开发者 Russ Cox 表示自己看到最近业界对非 x86 架构处理器的讨论沸沸扬扬,所以值得发表一篇关于 Go 对非 x86 架构处理器的支持的文章。

Russ 表示,他们十分看重 Go 的可移植性,因此一直在避免让 Go 过度适应任何特定的操作系统或架构。Go 最早的开源版本包括对两种操作系统(Linux 和 Mac OS X)和三种架构(64 位 x86、32 位 x86 和 32 位 ARM)的支持。

发展到现在,Go 增加了对更多操作系统和架构组合的支持:

  • Go 1(2012年3月)支持基于 64 位和 32 位 x86 架构的 FreeBSD、NetBSD 和 OpenBSD,以及基于 32 位 x86 架构的 Plan 9
  • Go 1.3(2014年6月)支持基于 64 位 x86 架构的 Solaris
  • Go 1.4(2014年12月)支持基于 32 位 ARM 架构的 Android 和基于 64 位 x86 架构的 Plan 9
  • Go 1.5(2015年8月)支持基于 64 位 ARM 架构和 64 位 PowerPC 架构的 Linux,以及基于 32 位和 64 位 ARM 架构的 iOS
  • Go 1.6(2016年2月)支持基于 64 位 MIPS 架构的 Linux,以及基于 32 位 x86 架构的 Android,并为基于 32 位 ARM 架构的 Linux(主要是树莓派系统)提供了官方二进制下载
  • Go 1.7(2016年8月)支持基于 z Systems (S390x) 架构的 Linux,以及基于 32 位 ARM 架构的 Plan 9
  • Go 1.8(2017年2月)支持基于 32 位 MIPS 架构的 Linux,并且增加了面向 64 位 PowerPC 和 z Systems 架构的 Linux 的官方二进制下载
  • Go 1.9(2017年8月)增加了面向 64 位 ARM 架构 Linux 的官方二进制下载
  • Go 1.12(2018年2月)支持基于 32 位 ARM 架构的 Windows 10 IoT Core,例如 Raspberry Pi 3。此外还支持基于 64 位 PowerPC 架构的 AIX
  • Go 1.14(2019年2月)支持基于 64 位 RISC-V 架构的 Linux

Russ 认为,虽然 Go 在早期凭借对 x86-64 port 的支持收获了很多关注,但如今,他们所有基于 SSA 的编译器后端都很好地支持了所有目标架构,并产出了许多优秀的代码。

他指出 Go 提供了十分方便使用的交叉编译。例如,要从 64 位 Linux 系统为基于 32 位 x86 架构的 Windows 构建应用程序只需使用以下命令:

GOARCH=386 GOOS=windows go build myapp  # writes myapp.exe

因此,Go 总能很好适应各种硬件环境。Russ 表示,多年来 Go 一直在 ARM64 Linux 服务器上为 Docker、Kubernetes 和 Go 生态的其他部分,以及 ARM64 Android 和 iOS 设备上的移动应用提供支持。

苹果宣布 Apple silicon 后,谷歌很快就和他们开始了合作,以确保 Go 和更广泛的 Go 生态能良好地运行在其设备上。最近发布的 Go 1.16 测试版已原生支持 M1 芯片

Russ 认为,在本地开发时使用与生产环境相同的 CPU 架构当然是最好的,这样可以消除两种环境之间的差异。但对于 Go 来说,无论是在 x86 系统上开发然后部署到 ARM 上,还是在 Windows 上开发然后部署到 Linux 上,或者其他组合,在一个系统上开发然后交叉编译部署到另一个系统,Go 都可以轻易且方便地胜任。

最后 Russ 提到了 Go 的未来移植计划,他们的下一个目标是支持 ARM64 Windows 10。如果你对此感兴趣并愿意提供帮助,访问 https://github.com/golang/go/issues/36439

展开阅读全文
4 收藏
分享
加载中
精彩评论
Java和PHP都在ARM Linux上跑多少年了,树莓派和Android跑LAMP服务多少年前的事了.
Go吹居然还说Go前无古人, 一骑绝尘,也不怕笑死人.
2020-12-24 11:04
9
举报
作者的努力值得肯定,毕竟是早期 golang 核心开发者,看到 M1 问世肯定有所感触,但其实 golang 支持 arm 架构没啥意义,毕竟 arm 平台牛逼的就是 iOS 和 Android,golang 又不适合写 UI……与Objective-C 和 Java 的交互也比较差。
2020-12-24 10:10
6
举报
多架构多系统支持这一点, go真的是前无古人, 一骑绝尘.
2020-12-24 09:54
2
举报
你以为我在TreeNewBee?看我博客还有PHP7的二进制文件.
apk文件是个Android App,可能运行不正常了.
不过可以通过adb shell把PHP7放到/data/local/tmp直接跑.
https://my.oschina.net/eechen/blog/655689
2020-12-25 16:36
1
举报
17年我在raspberry上用go写马达驱动
2020-12-25 15:04
1
举报
最新评论 (25)
Java和PHP都在ARM Linux上跑多少年了,树莓派和Android跑LAMP服务多少年前的事了.
Go吹居然还说Go前无古人, 一骑绝尘,也不怕笑死人.
2020-12-24 11:04
9
回复
举报
还是有区别的go是可以交叉编译出不同平台的二进制文件
2020-12-24 11:14
0
回复
举报
GCC笑而不语,否则你以为ARM版PHP和JDK拿来的,还不是得用GCC交叉编译出来的.
2020-12-24 12:19
0
回复
举报
不是说你的C代码,是说你的php java代码总没发编译到机器码吧,依赖运行环境
2020-12-24 17:24
0
回复
举报
你还是好好搞PHP吧,嘲笑自己不能理解的东西只能显得自己很幼稚。
2020-12-25 09:23
0
回复
举报
这东西本来就是你觉得好用就用,觉得不好用就不用,真的没必要去恶意攻击使用Go语言的开发者。
2020-12-25 09:30
0
回复
举报
五六年前我就在树莓派上构建过PHP7和Swoole的ARM二进制并放到Android手机上配合WebView跑本地服务,自信比你懂多了,少在我面前装X.
2020-12-25 10:31
0
回复
举报
五年前这个时候php7刚发布,swoole1.7。。。很6哦
2020-12-25 11:12
0
回复
举报
你以为我在TreeNewBee?看我博客还有PHP7的二进制文件.
apk文件是个Android App,可能运行不正常了.
不过可以通过adb shell把PHP7放到/data/local/tmp直接跑.
https://my.oschina.net/eechen/blog/655689
2020-12-25 16:36
1
回复
举报
好啦,好啦,知道你很牛批了,但有必要因此嘲讽别人吗?
2020-12-25 12:10
0
回复
举报
我想起了一句当下流行语:你以为你在三层,而你只能看到四层,其实我在第五层了。反之亦然,你以为你是第五层,其实你只是在第二层,而你只能看到第三层。
2020-12-25 12:23
0
回复
举报
17年我在raspberry上用go写马达驱动
2020-12-25 15:04
1
回复
举报
cgo交叉编译比较难。比如我用了SQLite
2020-12-24 10:52
0
回复
举报
我也遇到过,代码发布到树莓派上编译
2020-12-24 22:25
0
回复
举报
作者的努力值得肯定,毕竟是早期 golang 核心开发者,看到 M1 问世肯定有所感触,但其实 golang 支持 arm 架构没啥意义,毕竟 arm 平台牛逼的就是 iOS 和 Android,golang 又不适合写 UI……与Objective-C 和 Java 的交互也比较差。
2020-12-24 10:10
6
回复
举报
现在很多服务器商 开始支持arm服务器了 毕竟节省能耗
2020-12-24 10:21
0
回复
举报
ARM早就支持了,看文章了么,服务器很多已经在转向ARM了, go团队看见的东西比你多多了
2020-12-24 10:38
0
回复
举报
arm服务器便宜点
2020-12-24 10:50
0
回复
举报
哪里便宜了,我看华为的还贵了百分之几
2020-12-24 15:34
1
回复
举报
华为云的没看过,aws我了解是这样的,对面的支持建议我们用arm
2020-12-25 09:58
0
回复
举报
应该是没见过arm平台的服务器
2020-12-24 14:42
0
回复
举报
ARM和RISC-V服务器现在大把了
2020-12-24 16:03
0
回复
举报
m1是macos 的arm64架构,现在基于arm平台的服务器已经很多了,我的很多应用就是用树莓派跑golang服务。
2020-12-24 22:26
0
回复
举报
多架构多系统支持这一点, go真的是前无古人, 一骑绝尘.
2020-12-24 09:54
2
回复
举报
Go, Fighting!!!
2020-12-24 09:35
0
回复
举报
更多评论
26 评论
4 收藏
分享
返回顶部
顶部