2
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.

ZOZOAdvent Calendar 2021

Day 14

Goのソースコードのファイル名の末尾が_ios.goだとビルド対象にならない

Last updated at Posted at 2021-12-13

問題

Goで以下のファイル名を使うと多くの場合に問題が生じます。
なぜでしょうか?

hoge_ios.go

解答

ファイル末尾の _ios.go がbuild constraintだとみなされるため。
Goにはビルド対象の環境毎にソースコードを変えることができるbuild constraintという仕組みがあります。

そのため、Windows環境でのみ利用できる機能とLinux環境でのみ利用できる機能を混在させることもできます。
この指定はファイルの先頭に以下のように書くことができますが、ファイル名で指定することもできます。

// +build windows

ファイル名で指定する場合は、ファイル名の末尾を _windows.go とすると、上記と同じ効果が得られます。

windowsやlinuxなどは良く知られたものなので、目にする機会も多いかと思います
しかし、このbuild constraintに指定できる対象は意外な程に多いです。
以下のドキュメントにかかれているもの全てが対象になります。

特にiosやjsは文字数が少なく、これらの環境向けのGoバイナリを生成することがほぼないため、問題が発生した場合に発見が遅れがちです。
ディレクトリ内の全てのファイルがbuild constraintによってビルド対象から除外された場合は、以下のエラーが発生しますが、そうでない場合は未定義の関数や構造体に関するエラーとしてコンパイルエラーになることが多いです。

build constraints exclude all Go files in XXXXX
2
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
2
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?