Golang寫(xiě)的程序注入一些版本信息,Debug速度自然快幾倍琳水!

背景

Go程序運(yùn)行時(shí)打印git提交信息編譯信息
Golang編譯信息注入程序
當(dāng)在debug的過(guò)程中,我們需要明確當(dāng)前運(yùn)行的go程序是什么版本
不要浪費(fèi)時(shí)間在確認(rèn)版本的問(wèn)題上
在go build編譯的時(shí)候是可以注入外部參數(shù)的
讓go程序在運(yùn)行的時(shí)候就可以打印編譯時(shí)候的參數(shù)情況

以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

最終實(shí)現(xiàn)的go程序運(yùn)行時(shí)終端打印的信息如下

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]

具體實(shí)現(xiàn)

入口文件
main.go

package main

import (
    "fmt"
)

var (
    AppName      string // 應(yīng)用名稱(chēng)
    AppVersion   string // 應(yīng)用版本
    BuildVersion string // 編譯版本
    BuildTime    string // 編譯時(shí)間
    GitRevision  string // Git版本
    GitBranch    string // Git分支
    GoVersion    string // Golang信息
)


func main() {
    Version()
    // 你的業(yè)務(wù)代碼入口
}

// Version 版本信息
func Version() {
    fmt.Printf("App Name:\t%s\n", AppName)
    fmt.Printf("App Version:\t%s\n", AppVersion)
    fmt.Printf("Build version:\t%s\n", BuildVersion)
    fmt.Printf("Build time:\t%s\n", BuildTime)
    fmt.Printf("Git revision:\t%s\n", GitRevision)
    fmt.Printf("Git branch:\t%s\n", GitBranch)
    fmt.Printf("Golang Version: %s\n", GoVersion)
}

build編譯構(gòu)建腳本
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

本質(zhì)上是用 -ldflags 參數(shù)注入了的外部參數(shù)到go的變量當(dāng)中
go的更多build參數(shù)幫助可以通過(guò) go help build獲取

問(wèn)答

Q: 開(kāi)發(fā)環(huán)境是windows般堆,沒(méi)有bash環(huán)境怎么辦在孝?
A: 都裝了git的吧,那么用Git Bash終端是支持的

流水理魚(yú) 發(fā)布淮摔!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末私沮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子和橙,更是在濱河造成了極大的恐慌仔燕,老刑警劉巖造垛,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異晰搀,居然都是意外死亡五辽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)外恕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)杆逗,“玉大人,你說(shuō)我怎么就攤上這事鳞疲∽锝迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵建丧,是天一觀的道長(zhǎng)排龄。 經(jīng)常有香客問(wèn)我,道長(zhǎng)翎朱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任尺铣,我火速辦了婚禮拴曲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凛忿。我一直安慰自己澈灼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布店溢。 她就那樣靜靜地躺著叁熔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪床牧。 梳的紋絲不亂的頭發(fā)上荣回,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音戈咳,去河邊找鬼心软。 笑死,一個(gè)胖子當(dāng)著我的面吹牛著蛙,可吹牛的內(nèi)容都是我干的删铃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼踏堡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼猎唁!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起顷蟆,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤诫隅,失蹤者是張志新(化名)和其女友劉穎缎患,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體阎肝,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挤渔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了风题。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片判导。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沛硅,靈堂內(nèi)的尸體忽然破棺而出眼刃,到底是詐尸還是另有隱情,我是刑警寧澤摇肌,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布擂红,位于F島的核電站,受9級(jí)特大地震影響围小,放射性物質(zhì)發(fā)生泄漏昵骤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一肯适、第九天 我趴在偏房一處隱蔽的房頂上張望变秦。 院中可真熱鬧,春花似錦框舔、人聲如沸蹦玫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)樱溉。三九已至,卻和暖如春纬凤,著一層夾襖步出監(jiān)牢的瞬間福贞,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工移斩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肚医,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓向瓷,卻偏偏與公主長(zhǎng)得像肠套,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猖任,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,367評(píng)論 0 5
  • Golang具有一套可以構(gòu)建和處理go源代碼的程序你稚,作為命令行工具,這些程序也并非直接運(yùn)行,而是由go程序調(diào)用刁赖。運(yùn)...
    云時(shí)代的運(yùn)維開(kāi)發(fā)閱讀 3,427評(píng)論 0 0
  • 本文簡(jiǎn)單介紹 Golang 提供的命令搁痛。我們執(zhí)行 go help [command] 可以查看具體命令的幫助信息。...
    juniway閱讀 1,980評(píng)論 0 2
  • 千年書(shū)院古宇弛,才俊盛于斯鸡典。 嶺下橘洲韻,山頭岳麓詩(shī) 枪芒。 三湘存洙泗彻况,四水育先知。 一脈接云夢(mèng)舅踪,湘連澧沅資纽甘。
    Charles鈺閱讀 820評(píng)論 0 3
  • 測(cè)試成功的關(guān)鍵因素有兩個(gè):一是好的測(cè)試用例及文檔,覆蓋應(yīng)用的所有可能場(chǎng)景抽碌。二是有合適的測(cè)試數(shù)據(jù)來(lái)運(yùn)行所有測(cè)試用例悍赢。...
    大飯團(tuán)子閱讀 931評(píng)論 0 1