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