yn2011's blog

技術メモ

Go modules利用時にvscode-goのinferGopathが無効化される理由

環境

事象

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とエラーが表示される
    • 自分で定義したパッケージをimportするときはどうすればいいのか?

Go modules使用時に自分で定義したパッケージをimportしたい

その他

  • VSCodeでこの手の問題が発生すると、実際にGoが認識している$GOPATHVSCodeが認識しているものが違う場合もあり調査に手間がかかりがち(ちなみにVSCodeのコマンドパレットからgopathで検索するとVSCodeが認識ている$GOPATHが確認できることを今日初めて知った)
  • でもこれからはGo Modulesを使えば$GOPATHのことはあまり考えなくてもよくなるはず。めでたい。