9

constGo には、それぞれ異なる値が定義された一連のバイナリでコンパイルしたいプログラムがあります。より明確に、私はそのようなものを持っています:

const wordLen = 6
type knowledge [wordLen]byte

ここでwordLenは、値 6 に関連付けられていますが、値が 5 から 10 までの異なるバイナリが必要です。これを変数にして、配列ではなくスライスを使用することもできますが、パフォーマンスに大きな影響を与えることになります。私のソフトで(はい、試しました)。

特定のバイナリgo buildの値を示すために、引数にビルドタグを付けたいと思います。wordLenそれで、これを行う(可能な限り慣用的な)方法は何ですか?

4

2 に答える 2

16

はい、これはBuild Constraintsを使用して可能です。

フラグをgo build使用して、これらの制約のリストを指定できます。-tags

例:

main.go

package main

import "fmt"

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

フーゴー

// +build foo

package main

const f = "defined in foo.go"

バーゴー

// +build bar

package main

const f = "defined in bar.go"

異なるタグでコードをコンパイルすると、異なる結果が得られます。

$ go build -tags foo
$ ./main
defined in foo.go
$ go build -tags bar
$ ./main
defined in bar.go
于 2016-03-22T10:21:29.510 に答える
7

正確な問題は解決しませんが、他の問題を解決する可能性があるため-ldflags、go コンパイラのオプションを使用できることを追加します。

go build -ldflags "-X main.wordLen=6"

ただし、2 つの欠点があります。

  • 文字列に対してのみ機能します
  • 変数でのみ機能します
于 2016-03-22T10:26:03.810 に答える