Ubuntu上手動(dòng)安裝Go環(huán)境并解決“可執(zhí)行文件格式錯(cuò)誤”問(wèn)題
一、前言
在生產(chǎn)環(huán)境或開發(fā)機(jī)器上,往往需要最新穩(wěn)定版的 Go (Golang)以便使用最新特性。
Ubuntu 自帶的 APT 源版本可能滯后,因此本文將介紹如何手動(dòng)下載官方二進(jìn)制包進(jìn)行安裝,并重點(diǎn)說(shuō)明如何排查與解決“可執(zhí)行文件格式錯(cuò)誤”問(wèn)題。
二、系統(tǒng)架構(gòu)檢測(cè)
首先,確認(rèn)當(dāng)前機(jī)器的 CPU 架構(gòu),以下載對(duì)應(yīng)的 Go 安裝包。
uname -m
常見(jiàn)輸出及對(duì)應(yīng)安裝包:
x86_64或amd64→ 下載linux-amd64版本aarch64或arm64→ 下載linux-arm64版本i386或i686→ 下載linux-386版本
可選:進(jìn)一步確認(rèn)已經(jīng)解壓的 Go 二進(jìn)制文件架構(gòu)是否與自身相符:
file /usr/local/go/bin/go # 示例輸出:ELF 64-bit LSB executable, x86-64, ...
若 file 命令檢測(cè)到的架構(gòu)與 uname -m 不一致,則說(shuō)明二進(jìn)制與系統(tǒng)不匹配,需要重新下載正確版本。
三、卸載舊版 Go
若之前通過(guò)手動(dòng)或 APT 安裝過(guò) Go,建議先徹底移除:
sudo rm -rf /usr/local/go
注意:
不要忘記清理掉舊的 /usr/local/go 目錄,以免新舊版本沖突。
四、下載并安裝正確版本
1.獲取下載鏈接
訪問(wèn) https://go.dev/dl/,復(fù)制適合自己架構(gòu)的 .tar.gz 鏈接。
2.下載并解壓
以 Go 1.21.0、amd64 為例:
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz rm go1.21.0.linux-amd64.tar.gz
3.驗(yàn)證解壓結(jié)果
ls /usr/local/go/bin # 應(yīng)包含:go gofmt 等可執(zhí)行文件
五、配置環(huán)境變量
在用戶的 shell 配置文件中(~/.bashrc、~/.zshrc 等)添加:
# Go 根目錄 export GOROOT=/usr/local/go # Go 工作區(qū)(可按需修改) export GOPATH=$HOME/go # 將 go 可執(zhí)行文件加入 PATH export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
保存后使配置生效:
source ~/.bashrc
六、驗(yàn)證安裝
- 查看 Go 版本
go version # 預(yù)期輸出:go version go1.21.0 linux/amd64
- 運(yùn)行示例程序
mkdir -p $GOPATH/src/hello && cd $_
cat > main.go << 'EOF'
package main
import "fmt"
func main() {
fmt.Println("Hello, Go on Ubuntu!")
}
EOF
go run main.go # 直接運(yùn)行
go build -o hello # 編譯
./hello # 執(zhí)行輸出應(yīng)為:
Hello, Go on Ubuntu!
七、常見(jiàn)問(wèn)題及建議
“可執(zhí)行文件格式錯(cuò)誤”
- 多因下載包架構(gòu)與系統(tǒng)不符。
- 務(wù)必用
uname -m與file命令核對(duì)后,再選擇下載正確的.tar.gz。
后續(xù)升級(jí)
- 只需刪除
/usr/local/go并重新按上述步驟下載新版本,環(huán)境變量無(wú)需重復(fù)配置。
Go Modules
- Go 1.11+ 已原生支持模塊化管理,無(wú)需嚴(yán)格依賴
GOPATH,在項(xiàng)目根目錄執(zhí)行:
go mod init example.com/your-module
即可啟用模塊模式。
IDE 支持
- 推薦使用 VS Code + Go 插件,或 GoLand 等 IDE,享受智能補(bǔ)全、調(diào)試與代碼格式化。
- 通過(guò)以上步驟,你即可在 Ubuntu 上獲得與系統(tǒng)架構(gòu)完全匹配的 Go 開發(fā)環(huán)境,避免“可執(zhí)行文件格式錯(cuò)誤”等常見(jiàn)坑。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux下設(shè)置防火墻白名單(RHEL 6和CentOS 7)的步驟
下面小編就為大家?guī)?lái)一篇Linux下設(shè)置防火墻白名單(RHEL 6和CentOS 7)的步驟。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
Ubuntu基礎(chǔ)設(shè)定:openssh-server的安裝和使用介紹
今天小編就為大家分享一篇關(guān)于Ubuntu基礎(chǔ)設(shè)定:openssh-server的安裝和使用介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
undefined reference to ''pthread_create''的解決方法
undefined reference to 'pthread_create'的解決方法,需要的朋友可以參考一下2013-05-05
linux環(huán)境安裝openssh-server及使用密碼登錄方式
這篇文章主要介紹了linux環(huán)境安裝openssh-server及使用密碼登錄方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Linux內(nèi)存泄露的原因排查和解決方案(內(nèi)存管理方法)
文章主要介紹了運(yùn)維團(tuán)隊(duì)在Linux處理LB服務(wù)內(nèi)存暴漲、內(nèi)存報(bào)警問(wèn)題的過(guò)程,從發(fā)現(xiàn)問(wèn)題、排查原因到制定解決方案,并從中學(xué)習(xí)了Linux內(nèi)存管理的相關(guān)知識(shí)2025-02-02
Linux下動(dòng)態(tài)鏈接庫(kù)加載路徑及搜索路徑問(wèn)題
這篇文章主要介紹了Linux下動(dòng)態(tài)鏈接庫(kù)加載路徑及搜索路徑問(wèn)題,需要的朋友可以參考下2018-04-04
linux系統(tǒng)下部署項(xiàng)目訪問(wèn)報(bào)404錯(cuò)誤的解決方法
這篇文章主要為大家詳細(xì)介紹了linux系統(tǒng)下部署項(xiàng)目訪問(wèn)報(bào)404錯(cuò)誤的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12

