Golang寫的程式注入一些版本資訊,Debug速度自然快不少
背景
Go程式執行時列印git提交資訊編譯資訊
Golang編譯資訊注入程式
當在debug的過程中,我們需要明確當前執行的go程式是什麼版本
不要浪費時間在確認版本的問題上
在go build編譯的時候是可以注入外部引數的
讓go程式在執行的時候就可以列印編譯時候的引數情況
以gitlab-runner為例
gitlab-runner -v
Version: 11.10.1
Git revision: 1f513601
Git branch: 11-10-stable
GO version: go1.8.7
Built: 2019-04-24T09:29:18+0000
OS/Arch: linux/amd64
最終實現的go程式執行時終端列印的資訊如下
App Name: app-api
App Version: v2.0.1
Build version: 84d4ffb verdor
Build time: 2019-08-06T09:58:48+0800
Git revision: 84d4ffb
Git branch: master
Golang Version: go version go1.12.2 linux/amd64
2019-07-24 10:53:34.732 11516: http server started listening on [:20000]
具體實現
入口檔案
main.go
package main
import (
"fmt"
)
var (
AppName string // 應用名稱
AppVersion string // 應用版本
BuildVersion string // 編譯版本
BuildTime string // 編譯時間
GitRevision string // Git版本
GitBranch string // Git分支
GoVersion string // Golang資訊
)
func main() {
Version()
// 你的業務程式碼入口
}
// Version 版本資訊
func Version() {
fmt.Printf("App Name:t%sn", AppName)
fmt.Printf("App Version:t%sn", AppVersion)
fmt.Printf("Build version:t%sn", BuildVersion)
fmt.Printf("Build time:t%sn", BuildTime)
fmt.Printf("Git revision:t%sn", GitRevision)
fmt.Printf("Git branch:t%sn", GitBranch)
fmt.Printf("Golang Version: %sn", GoVersion)
}
build編譯構建指令碼
build.sh
#!/bin/bash
set -e
PROJECT_NAME="app-api"
BINARY="app-api"
OUTPUT_DIR=output
GOOS=$(go env GOOS)
APP_NAME=${PROJECT_NAME}
APP_VERSION=$(git log -1 --oneline)
BUILD_VERSION=$(git log -1 --oneline)
BUILD_TIME=$(date "+%FT%T%z")
GIT_REVISION=$(git rev-parse --short HEAD)
GIT_BRANCH=$(git name-rev --name-only HEAD)
GO_VERSION=$(go version)
CGO_ENABLED=0 go build -a -installsuffix cgo -v -mod=vendor
-ldflags "-s -X 'main.AppName=${APP_NAME}'
-X 'main.AppVersion=${APP_VERSION}'
-X 'main.BuildVersion=${BUILD_VERSION}'
-X 'main.BuildTime=${BUILD_TIME}'
-X 'main.GitRevision=${GIT_REVISION}'
-X 'main.GitBranch=${GIT_BRANCH}'
-X 'main.GoVersion=${GO_VERSION}'"
-o ${OUTPUT_DIR}/${BINARY} cmd/${BINARY}.go
本質上是用 -ldflags 引數注入了的外部引數到go的變數當中
go的更多build引數幫助可以透過 go help build獲取
問答
Q: 開發環境是windows,沒有bash環境怎麼辦?
A: 都裝了git的吧,那麼用Git Bash終端是支援的
釋出!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1834/viewspace-2824750/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- git版本資訊注入go程式GitGo
- golang程式版本管理Golang
- .netcore 寫快遞100的快遞物流資訊查詢介面NetCore
- Python編寫shellcode注入程式Python
- 記憶體的一些magic number和debug crt(0xCCCCCCCC和0xCDCDCDCD,debug版本的CRT為了方便除錯程式的初始值)記憶體除錯
- golang: 給二進位制檔案增加版本資訊Golang
- 輸出資訊法(Debug)
- MFC中獲取程式自身的版本資訊
- golang寫的即時通訊伺服器Golang伺服器
- rust 終端輸出 debug 資訊Rust
- golang寫的即時通訊伺服器gimGolang伺服器
- 使用動態輸出列印核心的DEBUG資訊
- golang gopsutil 程式 系統硬體資訊 獲取Golang
- ClownFish:比寫程式碼還快的通用資料訪問層
- 完美國際單機debug版本
- 為QT程式增加版本等屬性資訊QT
- VC++ MFC程式設計版本資訊控制C++C程式程式設計
- golang如何優雅的編寫事務程式碼Golang
- 判斷Android 當前版本是否為debug版本Android
- golang web框架,golang版本laravel 框架GolangWeb框架Laravel
- go 版本資訊Go
- golang實現子程式通訊Golang
- 程式碼注入之遠端呼叫執行緒的一些問題執行緒
- 關於Golang中的依賴注入實現Golang依賴注入
- golang最近遇到的一些坑Golang
- golang 版本的MVC開發框架GolangMVC框架
- 同事改Bug飛快,原來掌握了這些程式碼Debug技巧
- 程式注入之DLL注入
- Node.js可能是最適合寫簡易小爬蟲的語言,速度極快、程式碼極少Node.js爬蟲
- 一些程式碼寫法推薦
- IceRPC之依賴注入>快樂的RPCRPC依賴注入
- Ubuntu源哪個速度快?映象站速度比拼!Ubuntu
- 如何優雅獲的獲取不同系統版本中的程式資訊
- golang寫的即時通訊伺服器gim,支援TCP,WebSocketGolang伺服器TCPWeb
- 初學Golang的一些細節Golang
- 使用Golang時遇到的一些坑Golang
- 關於redis快取資料庫的一些思考Redis快取資料庫
- 1024 寫給程式設計師的一些建議程式設計師