1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Go】古い記法で書いたbuild constraintsは後方互換するのか調べてみた

Last updated at Posted at 2023-01-21

はじめに

build constraintsのための記法は、ver1.17以上で新しい書き方になっていたことを最近知りました。

古い記法

// +build ignore

現在の記法

//go:build ignore

そこでふと「Goは後方互換が保たれた言語だけど、ビルドタグも同様に後方互換されるんだろうか?」という疑問が浮かびました。
今回は、build constraintsの後方互換(?)について調べてみた内容を書いてみます。

調べた結果

go fmtコマンドを使えば、ver1.16以下で使用されていた古い表現を検知して、自動的に現行の表現を追加してくれるみたいです。

Go versions 1.16 and earlier used a different syntax for build constraints, with a "// +build" prefix. The gofmt command will add an equivalent //go:build constraint when encountering the older syntax.

実際に動作を確認してみた

私の環境は以下になります。

$ go version
go version go1.18 darwin/arm64

今回は以下のソースコードを実行してみたいと思います。

main.go
package main

import (
	"fmt"

	"github.com/be3751/old_bc/sub"
)

func main() {
	fmt.Println("Hello, World!")
	sub.Sub()
}
sub.go
// +build ignore

package sub

import "fmt"

func Sub() {
	fmt.Println("sub")
}

実行結果は以下の通りでした。
go run, go build で共通して、sub.goがビルド対象から除外されていることが分かります。
また、現行の記法を用いてbuild constraintsを設定した場合においても、同様の出力となります。

$ go run main.go
package command-line-arguments
        imports github.com/be3751/old_bc/sub: build constraints exclude all Go files in /Users/be3751/Desktop/old_bc/sub
$ go build main.go
package command-line-arguments
        imports github.com/be3751/old_bc/sub: build constraints exclude all Go files in /Users/be3751/Desktop/old_bc/sub

余談ですが、GoogleのGoチームが提供しているVSCode 拡張機能を入れていると、go fmtが自動的に作用するので、古い記法を使用しても保存時に自動で現行の記法を追記してくれます。

結論

  • 古い記法で書いたbuild constraintsも機能する
  • go fmtは現行の記法を追記してくれるだけ

参考

Build constraintsという節に引用した文の記載があります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?