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: %s

", AppName)

fmt.Printf("App Version: %s

", AppVersion)

fmt.Printf("Build version: %s

", BuildVersion)

fmt.Printf("Build time: %s

", BuildTime)

fmt.Printf("Git revision: %s

", GitRevision)

fmt.Printf("Git branch: %s

", GitBranch)

fmt.Printf("Golang Version: %s

", 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终端是支持的

> 流水理鱼 发布!

以上是 Golang写的程序注入一些版本信息,Debug速度自然快几倍! 的全部内容, 来源链接: utcz.com/z/512656.html

回到顶部