作ったものとか » Notes

GOEXPERIMENT + Build Constraints

2026-02-23 19:15:24 Go
最終更新日から %s 以上が経過しています。
内容が古くなっている可能性があるのでご注意ください。

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

書き方

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

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

GOEXPERIMENT

//go:build goexperiment.rangefunc

not GOEXPERIMENT

//go:build !goexperiment.rangefunc

main.go

package main

func main() {
	RangeOverFunc()
}

rof1.go

//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

//go:build !goexperiment.rangefunc

package main

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

build

> go build
> rof.exe
rangefunc disabled

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