メジャーアプデ的な事が行われるので、Goのバージョンを1.11まで引き上げる事になった。
で、1.12 とModとやらを入れたのだが、そこからVSCode上の挙動がおかしく、
・入力補完がされない
・定義へジャンプができなくなった
・保存するたびにエラーや警告箇所を出してくれる機能が死んでる
ともうだめじゃねこれってくらい従来と異なる環境となった。
で、結局解決したのでメモっておく。
【GAE/Go 2gen対応でやったこと】
1.goのバージョンを上げる準備
.bash_profile に
export GO111MODULE=on
と追記して保存。
コマンドで、「source ~/.bash_profile」として反映させる。
2.GoogleAppEngineのドキュメントに従って go1.11or1.12 を入れた
1.12でもいいみたいだけどローカルで動かせない説がある。本当かはまだ試してない。3.ファイルの配置を変えた
◆ 今までのファイル構成
app.yaml
src/main.go
◆ 1.11からの構成
app.yaml
go.mod
main.go
4.main.goの頭を変えた
package srcだったのを
package main
に変えた。
5.go.modを作った
自分の場合、GAE/goのプロジェクトルートで「go mod init main」と叩いた。出来上がったら「go build」すると、goonなど依存関係がgo.mod内に追記されて勝手に落としてくれた。
6.go version コマンドを叩いて出たバージョンをgo.modに追加した。
自分の場合は1.12.7だったので「go 1.12.7」と追加した。ここまでで、go.modの中身は
module main
go 1.12.7
require (
github.com/mjibson/goon v1.0.0
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297
google.golang.org/appengine v1.6.2
)
みたいになってるはず。(requireは使ってる物によって変わるので気にせず)
7.app.yamlも変えた
runtime: go112service: default
instance_class: B1
basic_scaling:
max_instances: 1
idle_timeout: 1m
main: ./
(以下略)
とした
【VSCodeをgo1.12+modに対応させる】
1.goplsを入れる準備
※すでにgoの拡張機能が入っている状態として話を進める。VSCode実行中に「Command(Ctrl)+,」でsetting.jsonと入力
「setting.jsonで編集」をクリックする。
"go.useLanguageServer": true,
2.goplsをダウンロードした
以下のコマンドを叩く
go get golang.org/x/tools/gopls@latest
3. VSCodeにgoのtoolsを入れた
VSCodeを実行中に「Command(Ctrl)+Shift+P」を押すか表示>コマンドパレットを選ぶ
出てきた入力欄に「Go: Install/Update Tools」と入力しEnterを押す
なんかリストが出てくるので、入力欄左のチェックボックスをチェックし全部インストールする。
4.VSCodeを設定した
setting.json に以下をまるっと追記し保存。VSCodeを再起動したらちゃんと補完などが動くようになった。
{
"go.languageServerExperimentalFeatures": {
"autoComplete": true,
"documentSymbols": true,
"findReferences": true,
"format": false,
"goToDefinition": true,
"goToTypeDefinition": true,
"hover": true,
"signatureHelp": true,
"rename": true,
"workspaceSymbols": true,
"diagnostics": true,
},
"go.testOnSave": true,
"go.lintOnSave": "package",
"go.formatTool": "goimports",
"go.testFlags": [
"-v"
],
"go.autocompleteUnimportedPackages": true,
"[go]": {
"editor.codeActionsOnSave": {
"source.organizeImports": false
},
}
}