M1 Mac使用原生Go与开发环境

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

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

方式一:编译源代码

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

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

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

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

1xcode-select --install 2 3mkdir $HOME/goroots

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

cd $HOME/goroots

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

cd $HOME/goroots/gosource/src

注意上面的编译环境变量参数中有 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

1cd $HOME/goroots/gosource/src 2 3export PATH="$PATH:$HOME/goroots/gosource/bin/"

之后就可以正常使用了。

方式二:下载Go1.16beta1

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

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

go version

开发工具

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

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

解决方法:

git clone https://github.com/oxisto/delve.git

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

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

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

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

本文分享自微信公众号 - 晋级CTO(up_cto)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )