作ったものとか » Articles

GOEXPERIMENT + Build Constraints

2024-02-13 22:32:04 go

例えば GOEXPERIMENT=rangefunc の場合にビルドしたい/したくない場合の書き方

書き方

ファイルの冒頭にコメントを記述するやり方でいけます。

すべて小文字の goexperiment.xxx を使います。 否定形は !goexperiment.xxx です。

GOEXPERIMENT

1
//go:build goexperiment.rangefunc

not GOEXPERIMENT

1
//go:build !goexperiment.rangefunc

main.go

1
2
3
4
5
package main

func main() {
	RangeOverFunc()
}

rof1.go

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
//go:build goexperiment.rangefunc

package main

func RangeOverFunc() {
	f := func(yield func(i int) bool) {
		n := 0
		for {
			yield(n)
			n++
		}
	}

	for i := range f {
		println("ctrl+c してね")
		println(i)
	}
}

rof2.go

1
2
3
4
5
6
7
//go:build !goexperiment.rangefunc

package main

func RangeOverFunc() {
	println("rangefunc disabled")
}

build

1
2
3
4
5
6
7
8
> go build
> rof.exe
rangefunc disabled

> set GOEXPERIMENT=rangefunc
> go build
> rof.exe
 :