memoメモ

最近はGo言語関連で。φ(..)メモメモ

コンパイル時に特別な文字列情報を入れるには #golang

Go言語の話題です。

コンパイル時にフラグを与えることで、ソースコード上の特定の文字列情報を書き換えることができます。 これを応用すれば、例えば、バージョンやリビジョン番号などの特別な文字列情報を後で指定するといった使い方ができます。

以下、例を書いてみました(version.go):

package main

import (
    "fmt"
)

var version string

func main() {
    fmt.Println(version)
}

versionの変数が定義されていますが、情報を持っていません。 ここで:

$ go build -ldflags "-X main.version 0.1" version.go

としてコンパイルして実行してみます。すると:

$ ./version
0.1

と出力されます!

ちなみに、 -ldflagsでGoのリンカに対して引数を与えます。 -ldflagsに渡せる引数は:

$ go tool 6l

とすると一覧が表示できます。(6lなのか8lなのか、環境で違います。go tool -nを使ってコマンドを確かめましょう。)なお、ここにもヘルプが書かれています: ld - The Go Programming Language

他にも使い方が考えられますので、いろいろと試してみてください。

本日のgist: version.go

プログラミング言語Goフレーズブック

プログラミング言語Goフレーズブック

  • 作者: David Chisnall,デイビッド・チズナール,柴田芳樹
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2012/10/04
  • メディア: 単行本(ソフトカバー)
  • 購入: 1人 クリック: 5回
  • この商品を含むブログを見る
基礎からわかる Go言語

基礎からわかる Go言語

Programming in Go: Creating Applications for the 21st Century (Developer's Library)

Programming in Go: Creating Applications for the 21st Century (Developer's Library)