すげぇ久しぶりにGo書こうとしたら
前書いたのはたしか1.7系で、そのときのノリで再々々入門をしようとしてモダンな書き方を調べると、modules ?なんですかこれは? 知らない子ですね...?
GOPATH モードからモジュール対応モードへ移行せよ - Qiita
Go Modulesの概要とGo1.12に含まれるModulesに関する変更 #golangjp #go112party - My External Storage
えっGOPATH
ばいばいなの....わーいわーい
すげぇ久しぶりにGo書いたら
当時、学習用にお世話になってたこちらを使い、
中身をそのまんまやっていて、vscodeでやっていくことにして、starting_go/
から、
. ├── README.md ├── chap1 │ ├── go.mod │ └── tekitou.go ├── chap2 │ └── zoo │ ├── animals │ │ └── elephant.go │ ├── go.mod │ └── main.go ├── chap3
chap2
をgo build
しようとしたわけ。
各ファイルは、
// go.mod module m go 1.12
// animals/elephant.go package animals func ElephantFeed() string { return "GRASS" }
// main.go package main import ( "fmt" "m/animals" ) func main() { fmt.Println(animals.ElephantFeed()) }
みたいなノリで適当に
"tasks": [ { "label": "run", "type": "shell", "command": "go", "args": [ "run", "${file}" ], }
的なtasks.json
でやったら怒られるわけです。
> Executing task: go run /Users/this/is/fullpath/for/workspace/starting_go/chap2/zoo3/main.go < build command-line-arguments: cannot load m/animals: cannot find module providing package m/animals
あっそう
tasks.jsonでコマンドを続けて書いても、cd
などは反映されない
単純につなげればいけると思ってましたが駄目でした。なお続けて書くやつはこちらを参考にしました
VSCodeでタスク実行時に複数コマンド実行 - Qiita
&&
でいけるらしい
結局、こうしました
"command": "cd ${fileDirname} && go run ${fileBasename}"
これだとgo runしたいディレクトリで
cd`で遷移した状態で実行可能になりました。
main.goで他のパッケージを呼んでいる場合
"command": "cd ${fileDirname} && go run *.go"