Mac M1原生(ARM64)Golang dev&debug


 2021-5-1 補充更新:

最新更新的 MacOS 11.3 (20E232) 上,也遇到了這個情況,go版本是 go 1.16.4.
解決方案:
下載最新版本源代碼,對dlv進行重新編譯打包:

git clone https://github.com/go-delve/delve.git
cd delve/cmd/dlv/
go build
go install

一般安裝目錄會在你的go安裝目錄上,或者是你的GOPATH/bin中,然后在Goland中點擊: Help → Edit Custom Properties...

dlv.path=/usr/local/bin/dlv

保存重啟,解決step over(F8) 直接運行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.16.4

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。

 

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上編寫和調試我們的框架代碼了 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM