Go modules利用時にvscode-goのinferGopathが無効化される理由
環境
事象
- vscode-goにはワークスペースやユーザ毎に
$GOPATH
を推測するgo.inferGopath
というオプションがあり、自分は常に有効化している(VSCodeでGoのデバッグにも以前に書いた) - しかし、Go modulesを使用しているディレクトリ(go.modが配置されている)をVSCodeで開くと下記のエラーが表示された
The "inferGopath" setting is disabled for this workspace because Go modules are being used.
原因
- Go modulesを使用している場合は
$GOPATH
の設定が不要だから - Go modulesを使用する利点の1つは
$GOPATH
を通さず、$GOPATH
配下外に作成されたディレクトリ上で外部の依存パッケージを扱えること- しかし、Goの
import
は$GOPATH/src
や$GOROOT
からパッケージを探す仕様だったはず...- ちなみにgo.modが直下になるように
$GOPATH
を設定すると$GOPATH/go.mod exists but should not
とエラーが表示される
- ちなみにgo.modが直下になるように
- 自分で定義したパッケージをimportするときはどうすればいいのか?
- しかし、Goの
Go modules使用時に自分で定義したパッケージをimportしたい
- 答え:User-written packages fail to import with go.mod. GO111MOD=on
go.modのモジュール名/パッケージ名
でimportできる- 結局、importからは
$GOPATH/src/モジュール名
に見えているっていう理解でいいのかな... - ちなみにモジュール名は実際のディレクトリ名と異なっていても良い模様
- 結局、importからは