Go打包二進(jìn)制文件的實(shí)現(xiàn)
背景
眾所周知,go語(yǔ)言可打包成目標(biāo)平臺(tái)二進(jìn)制文件是其一大優(yōu)勢(shì),如此go項(xiàng)目在服務(wù)器不需要配置go環(huán)境和依賴(lài)就可跑起來(lái)。
操作
需求:打包部署到centos7
筆者打包環(huán)境:mac os
方法:進(jìn)入main.go
所在目錄,輸入如下命令,當(dāng)前目錄便會(huì)生成main
的可執(zhí)行文件
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
Windows平臺(tái)打包到Linux執(zhí)行不一樣,需要輸入如下命令
set CGO_ENABLED=0 set GOOS=linux set GOARCH=amd64 go build
- CGO_ENABLED 表示不使用cgo
- GOOS 表示目標(biāo)平臺(tái)系統(tǒng)(Windows,linux,darwin「mac os」等等)
- GOARCH 表示目標(biāo)系統(tǒng)架構(gòu)(arm arm64 386 amd64 等等)
打包完成后,將二進(jìn)制文件放到服務(wù)器系統(tǒng),賦可執(zhí)行權(quán)限:
chmod 773 main
直接運(yùn)行即可:
./main
或后臺(tái)執(zhí)行:
nohup ./main 1>info.log 2>&1 &
linux 后臺(tái)運(yùn)行程序
一般為了程序后臺(tái)運(yùn)行,我們需要使用nohup命令.
此時(shí)需要對(duì)程序運(yùn)行時(shí)所產(chǎn)生的輸出信息記錄,因此就需要使用linux的信息輸出命令
一個(gè)例子
比如要讓redis-server程序后臺(tái)運(yùn)行
1.非后臺(tái)運(yùn)行:
$> ./redis-server
2.后臺(tái)運(yùn)行:
$> nohup ./redis-server 1>/dev/null 2>&1 &
- 其中數(shù)字1代表標(biāo)準(zhǔn)輸出,2代表錯(cuò)誤信息輸出,還有未使用的標(biāo)準(zhǔn)輸入即數(shù)字0.
- 1>/dev/null 2>&1 &的意思是標(biāo)準(zhǔn)信息輸出到空設(shè)備即不做任何處理,也不做任何顯示,/dev/null也可以替換為文本文件名(如 out.log),此時(shí)標(biāo)準(zhǔn)信息就會(huì)輸出到指定文件.
- 2>&1表示錯(cuò)誤信息輸出到標(biāo)準(zhǔn)輸出,即輸出同1>后面的位置,當(dāng)然也可以直接指定新文件名(如 err.log).
- 最后的& 表示程序后臺(tái)運(yùn)行
上面的命令還可簡(jiǎn)寫(xiě):
nohup ./redis-server >/dev/null 2>&1 &
即去掉標(biāo)準(zhǔn)輸出數(shù)字1
后臺(tái)運(yùn)行一個(gè)程序
1.先用 netstat -tln 查看端口信息
2.isof -i:端口 可以找到程序進(jìn)程號(hào)PID
3.kill PID 可以關(guān)閉程序
如此便是go打包到linux平臺(tái)的完整操作,歡迎大家指證。
到此這篇關(guān)于Go打包二進(jìn)制文件的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Go打包二進(jìn)制文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語(yǔ)言中的空值(nil)與零值(zerovalue)區(qū)別詳解
在Go語(yǔ)言中,空值(nil)和零值(zero value)是兩個(gè)不同的概念,它們?cè)谡Z(yǔ)義、使用場(chǎng)景以及實(shí)際的編程實(shí)踐中有著明顯的區(qū)別,理解這兩者的差異對(duì)于編寫(xiě)清晰、健壯的Go代碼至關(guān)重要,需要的朋友可以參考下2024-06-06go原子級(jí)內(nèi)存操作實(shí)現(xiàn)
原子級(jí)內(nèi)存操作是在多線程并發(fā)執(zhí)行時(shí),能夠確保某個(gè)內(nèi)存操作是不可中斷的操作,本文主要介紹了go原子級(jí)內(nèi)存操作實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02詳解Go語(yǔ)言中關(guān)于包導(dǎo)入必學(xué)的 8 個(gè)知識(shí)點(diǎn)
這篇文章主要介紹了詳解Go語(yǔ)言中關(guān)于包導(dǎo)入必學(xué)的 8 個(gè)知識(shí)點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Go語(yǔ)言中如何實(shí)現(xiàn)并發(fā)
Go的并發(fā)機(jī)制通過(guò)協(xié)程和通道的簡(jiǎn)單性和高效性,使得編寫(xiě)并發(fā)代碼變得相對(duì)容易,這種并發(fā)模型被廣泛用于構(gòu)建高性能的網(wǎng)絡(luò)服務(wù)、并行處理任務(wù)和其他需要有效利用多核處理器的應(yīng)用程序,這篇文章主要介紹了在Go中如何實(shí)現(xiàn)并發(fā),需要的朋友可以參考下2023-09-09golang常用庫(kù)之字段參數(shù)驗(yàn)證庫(kù)-validator使用詳解
這篇文章主要介紹了golang常用庫(kù):字段參數(shù)驗(yàn)證庫(kù)-validator使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借價(jià)值,需要的朋友可以參考下2020-10-10Go語(yǔ)言定時(shí)任務(wù)cron的設(shè)計(jì)與使用
這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中定時(shí)任務(wù)cron的設(shè)計(jì)與使用,文中的示例代碼講解詳細(xì),對(duì)我們深入掌握Go語(yǔ)言有一定的幫助,需要的可以參考下2023-11-11Go語(yǔ)言web快速開(kāi)發(fā)框架Gin的HttpRouter路由的使用
in框架內(nèi)部使用了高性能的路由器庫(kù)httprouter,支持動(dòng)態(tài)參數(shù)匹配和簡(jiǎn)潔的接口,本文主要介紹了Go語(yǔ)言web快速開(kāi)發(fā)框架Gin的HttpRouter路由的使用,感興趣的可以了解一下2025-03-03