set cgo_enabled=
1set goarch=
set goos=windows
go build
set cgo_enabled=
0set goarch=amd64
set goos=linux
go build
上述打包只能打包go語言檔案,如果專案中使用了靜態資源或配置檔案不會被進行打包,執行打包後的檔案會報錯
解決方法:利用go-bindata將配置檔案打包進二進位制go檔案
go-bindata #執行此命令驗證安裝成功與否
#如果命令執行失敗,則
echo $gopath/bin #檢視gopath/bin目錄是否有go-bindata可執行檔案
cp $gopath/bin/go-bindata /bin
go
-bindata -o=bindata/bindata.
go-pkg=bindata conf/
... crts/
...
-o=bindata/bindata.go : 打包生成的 bindata.go 檔案, 放到 bindata/ 目錄下檢視命令引數-pkg=bindata : 打包生成的 bindata.go 檔案, 包名設定為 bindata
conf/… crts/… : 需要打包的資料夾下的所有檔案
go-bindata --help
方式1:go程式中直接讀取 go-bindata打包的靜態檔案內容(無法實時修改)
func
main()
}
方式2:將配置檔案解壓到與靜態資源路徑相同的資料夾中,再通過go程式讀取配置檔案獲取(可實時修改)
func
main()
/** * @ time: 2020/12/28 13:49
* @ author: qyz
* @ description: 釋放bindata打包的靜態資源
* @ param:
* :
* @ return:
* :
**/func
releaseresources()
err = os.
mkdirall
(crtspath, os.modeperm)
if err !=
nil// 獲取所有資源路徑和檔名稱
filepaths := bindata.
assetnames()
for_
, filepath :=
range filepaths
writefile
(filepath, contentbytes)}}
}/**
* @ time: 2020/12/28 10:53
* @ author: qyz
* @ description: 將bindata壓縮的檔案解壓到當前目錄
* @ param:
* :
* @ return:
* :
**/func
writefile
(filepath string
, contentbytes [
]byte
)defer file.
close()
writer := bufio.
newwriter
(file)if_
, err := writer.
write
(contentbytes)
; err !=
nilif err := writer.
flush()
; err !=
nil}
/** * @ time: 2020/12/28 10:46
* @ author: qyz
* @ description: 判斷檔案或資料夾是否存在
* @ param:
* :
* @ return:
* :
**/func
isfileordirectoryexist
(filepath string
)bool
GO專案編譯上線
go build main.go編譯後會在同級目錄生成可執行檔案 main.exe2.1 伺服器上去編譯 安裝go,配置gopath 第一步,把伺服器上配置成本地一樣的環境 第二部,包括專案裡面所依賴的包 第三步,專案原始碼拷貝到與伺服器,伺服器上編譯 go build main.go編譯後會在同級...
win32 使用go編譯go自身
如直接自己編譯自己,會出現下面的錯誤 cd c go src make.bat building go cmd dist using c go go tool no such tool compile go tool no such tool compile go tool no such tool...
GO專案編譯及執行
我安裝了go語言環境,使用jetbrains goland開發工具開啟專案,然後 run 報錯了。錯誤定位在主函式main.go裡,這一句 import fmt github.com go sql driver mysql 就說找不到相關的包。我不太清楚確切的因由,像 github.com go s...