🗽

wsl2+vscodeで勝手にgo.modが書き換わる話

2022/07/19に公開2

状況

windows11/wsl2(Ubuntu)/dockerを使った開発(サブディレクトリにgo.modがある状態)。
settings.jsonは以下。

    "go.useLanguageServer": true,
    "go.toolsEnvVars": {
        "GO111MODULE": "on"
    },
    "gopls": {
        "experimentalWorkspaceModule": true
    },

wsl2ではgoenvで管理している、以下の通り

GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/ogiwelcome/.cache/go-build"
GOENV="/home/ogiwelcome/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/ogiwelcome/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/lib/go-1.13"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go-1.13/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build705765401=/tmp/go-build -gno-record-gcc-switches"

起きていること

go周りのファイルを編集すると勝手にサブディレクトリのgo.modファイルの内容が書き換わる、戻すのにdocker上でgo mod tidyを打つ必要がある。

試したこと

さ~てどうしたもんかなという感じ。useLanguageServerとかそこらへん周りな気がしている。
いろいろ調べた感じgoenvで環境管理してるのもよくなさそう。とりあえずgoenv消す。

sudo rm -rf `goenv root`
sudo apt autoremove

ここら辺叩くと関連ファイル全部消してくれる。こういう時は一旦全部消すのがいい。
続いて公式からgolangを入れる。

wget https://dl.google.com/go/go1.18.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.18.linux-amd64.tar.gz

bashを使っているので~/.bashrcをいじる。

vi ~/.bashrc
GOPATH="$HOME/go"
PATH="$PATH:/usr/local/go/bin:$GOPATH/bin"
bash

あとはサブディレクトリの反映のためにsettings.jsonをいじる。
参考にしました
ここまでで治った、よかった。

最後に

env周りをどう管理するかはいまだによくわからん、これだけはpoetryに勝つものがないと思ってる。

Discussion

mattnmattn

古い Go のバージョン(1.13)では workspace も動きませんし、また go.mod が変更されてしまうという問題が残っていました。記事内で書かれておられる通り、Go の最新を使うのが良いと思います。