Mac M1原生(ARM64)Golang dev&debug

把“烦恼”放进看板,开源免费的项目管理工具来帮你啦!

前言

通过本文最终实现了在M1芯片的Mac mini上的Goland的开发,并通过编译源码解决了无法DEBUG的问题。

Go 1.16版将正式支持Apple Silicon M1芯片,即arm64架构的Mac操作系统,目前go 1.16版版本为beta1,只是会在这个基础上再修修bug,改进文档等。

目前我测试M1 ARM64在编译性能上也超过了我的macbook pro 15的i9处理器,而且他还不发热,在晚上写代码的时候总能听到头上灯的电流声,太安静了有些不适应:)

 

本文软硬件环境:

设备:Mac Mini M1 8G/256G 

Go版本: 1.15/1.16

final happy coding :) https://github.com/yoyofx/yoyogo  

 

正文

目前有两种方式抢先体验Go1.16:

方式一:编译源代码   

MacOS需要确保安装有 rosetta 2 (https://support.apple.com/en-us/HT211861)。

当然Mac上还需要安装一些工具链:如果MacOS在升级更新后会出现其它问题比如:xcrun: error: invalid active developer path, missing xcrun

同样使用下面命令可以解决:

 

xcode-select --install
sudo xcode-select -switch /

 

安装Go1.15,从1.4开发Go的编译器需要Go本身来编译Go,那么为了编译1.16,我们首先需要amd64版本的Go1.15。

 

mkdir $HOME/goroots

cd $HOME/goroots

wget https://dl.google.com/go/go1.15.6.darwin-amd64.tar.gz

tar xzf go1.15.6.darwin-amd64.tar.gz

 

获取Go的最新源代码,clone出来之后目前master分支便是 1.16 的预发布分支。

 

cd $HOME/goroots

git clone https://go.googlesource.com/go gosource

 

要编译go的话,需要先预编译 bootstrap 响应的工具链,这个工具链本身也是需要是arm64版,不然最后make出来的还会是x86。

JVM故障处理工具,使用总结

 

cd $HOME/goroots/gosource/src

arch --x86_64 env GOROOT_BOOTSTRAP=$HOME/goroots/go GODEBUG=asyncpreemptoff=1 GOOS=darwin GOARCH=arm64 ./bootstrap.bash

 

注意上面的编译环境变量参数中有 GODEBUG=asyncpreemptoff=1 ,这是因为我们的go 1.15是amd64版,直接在m1 mac中运行时需要依赖 rosetta 2,而目前似乎rosetta 2对于go的协程异步抢占还有bug,因此需要关闭;否则编译时会死锁并出现错误:

rosetta error: ulock_wait failure: 105

完成这步后,我们便可在 $HOME/goroots/go-darwin-arm64-bootstrap 路径下获得编译完整go的arm64工具链。

 

最后一步编译arm64原生go

 

cd $HOME/goroots/gosource/src
arch --arm64e env GOROOT_BOOTSTRAP=$HOME/goroots/go-darwin-arm64-bootstrap ./make.bash
export PATH="$PATH:$HOME/goroots/gosource/bin/"

 

之后就可以正常使用了。

方式二:下载Go1.16beta1

https://golang.org/dl/go1.16beta1.darwin-arm64.pkg

下载安装后可以直接使用:

 

go version
go1.16beta1 darwin/arm64
 

开发工具

目前Goland正式版已经开发支持Mac M1的开发。

但是目前Goland的工具链还不能正常的进行DEBUG。

编译DEBUG delve工具链

git clone https://github.com/oxisto/delve.git
git checkout -b darwin-arm64-lldb
cd delve/cmd/dlv/
go build
go install
cd $GOPATH
cp dlv/Applications/GoLand.app/Contents/plugins/go/lib/dlv/Mac/dlv
 

 

将delve进行arm64的编译后,覆盖Goland上的版本,就可以使用了。

 

ok ,如上我们终于又可以在M1上编写和调试我们的框架代码了 。

HBase 底层原理详解(深度好文,建议收藏)

给TA买糖
共{{data.count}}人
人已赞赏
经验教程

【十天自制软渲染器】DAY 01:图形学学习建议与环境搭建

2021-1-14 9:00:00

经验教程

把“烦恼”放进看板,开源免费的项目管理工具来帮你啦!

2021-1-14 9:29:00

⚠️
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。 本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。本站部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。
无意侵害您的权益,请发送邮件至 momeis6@qq.com 或点击右侧 私信:momeis 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索