0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

go testで `-overlay` オプションによるエラーとなったらバージョンをチェックしよう

0
Posted at

Goのバージョンアップ運用を TOOLCHAIN 方式(go.modやGOTOOLCHAINによる管理)に変更してからテストコードを実行したところ、以下のエラーが発生するようになりました。

$ go: overlay contains a replacement for /Users/hoge/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.4.darwin-arm64/src/time/time.go. Files beneath GOMODCACHE (/Users/hoge/go/pkg/mod) must not be replaced.

GoのIssueを確認したところ、 -overlay オプションが機能してないのではと考えていました。

しかし、実際には、Go1.21以降の自動アップデートとの競合による問題で、キャッシュが残っていたのが原因でした。

-overlay オプションによるエラーとなった時の整理しておきたいポイントをまとめます。

環境情報

端末: Macbook Air
Go Version: 1.25.4
*ローカルは、homebrewにてインストールして管理していました。
*今回は、2025年12月3日 Go v1.25.5 がリリースされたので、対応したタイミングで、 Go v1.25.5 となりました。

確認事項① ローカル環境のGoのバージョン

ローカル環境のGoのバージョンと TOOLCHAIN(go.mod)でのGoのバージョンに差分がある場合は、エラーとなる可能性があります。

例えば、go.modに記載されているバージョンが、 v1.25.4 で、ローカル環境が v1.24 となっているとします。
この場合、go.modに記載されているバージョンを使おうとするため、意図的に、高いGoのバージョンを使おうとします。
結果として、差分のインストールが行われますが、自動アップデートで入った場合は置き換え禁止のルールに該当します。

結果として、-overlay オプションのエラーが発生します。

-overlay オプションエラーに遭遇した時、go.mod/TOOLCHAIN、そして、ローカル環境のバージョンに差分が発生していないかを確認して、必要に応じて、ローカル環境のGoのバージョンをあげることで解消されます。

確認事項② homebrewのキャッシュ

キャッシュ情報は、以下に配置されています。

$ /Users/hoge/go/pkg/mod

全てのダウンロード済みモジュール(toolchainを含む)が配置されており、 ls -la コマンドを叩くことで、パッケージを確認できます。

このまま、 go clean -modcache を実行すれば、キャッシュは削除されます。
しかしながら、一部のモジュールは、modディレクトリ以下に存在せず、mod ディレクトリと同じ階層に存在するケースがあります。

$ ls -la /Users/hoge/go/pkg/

$ staff  544 12  8 10:31 mod
$ staff   96  3  7  2025 sumdb
$ staff  320 11 21 14:12 testtime

今回は、homebrewで管理しているGoを一度削除して、再度インストールすることで、mod ディレクトリと同じ階層に存在するモジュールが更新されました。

Goのアンインストール
$ brew uninstall go

Goの再インストール
$ brew install go
$ go version
$ go version go1.25.5 darwin/arm64
再インストール実施前:
staff  320 11 21 14:12 testtime

再インストール実施後:
staff  384 12  8 13:56 testtime ← 更新されている

homebrewにて管理している場合は、削除→再インストールによるGoのバージョンアップで解消されました。

Goのバージョンを最新にて管理する

Go1.25 にて導入された -overlay オプションの制約によって、 GOMODCACHE 以下は置き換え禁止となっています。
そのため、Goのバージョン違いによって、自動インストール→置き換え→エラーという流れが生まれてしまいます。

TOOLCHAIN にて、Goのバージョンを管理されている場合は、ローカルのGoのバージョンを見直して、最新にしておくことをおすすめします。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?