Go 애플리케이션에 빌드 정보 추가하기

Go로 작성한 애플리케이션에 빌드 정보를 추가하는 방법

애플리케이션에 빌드 정보(버전, 빌드 넘버, Git 커밋 해시값 등)를 남기고 싶은 경우가 있습니다. sed 등의 커맨드를 이용해서 코드를 직접 편집할 수도 있지만 가독성도 떨어지고 실수하기 쉽습니다.

Go에서는 빌드시(정확히는 링크 시점)에 문자열 값을 변경하는 플래그가 있습니다. [go tool link 문서]

-X importpath.name=value
	Set the value of the string variable in importpath named name to value.
	This is only effective if the variable is declared in the source code either uninitialized
	or initialized to a constant string expression. -X will not work if the initializer makes
	a function call or refers to other variables.
	Note that before Go 1.5 this option took two separate arguments.

go build 커맨드의 ldflag 옵션에서 링크에 전달할 플래그를 지정할 수 있습니다. 이를 이용해 다음과 같이 빌드 커맨드에 버전 정보를 전달할 수 있습니다.

main.go

package main

import (
	"fmt"
	"os"
)

var VERSION = "dev"

func main() {
	fmt.Printf("The version is %s\n", VERSION)
}
VERSION=0.1
go build -ldflags "-X main.VERSION=$VERSION" -o myapp .
./myapp
The version is 0.1
목록으로