golangのv1.16の開発環境を準備する
いつの間にか
v.1.16まで上がっていた、なんか以前とパッケージの扱い? とか変わっているので少し見直し
なんかgo modulesとかいうのがあるらしい
当時は各モジュールの最新バージョンが適用されやすくなっていて 新しい環境でビルドした際にコンパイルエラーとなっていたことがある。 多分、revelとか・・・
そのため、バージョンを固定にして対応していた このgo modulesを使用するとバージョンを各プロジェクト毎に管理できるらしく、 ちょっと楽になるらしい
参考情報
ローカル環境のみでの Go Modules と自作パッケージ - Qiita
WindowsにGo言語開発環境をインストールする - Qiita
goの再インストールから
インストール
% brew install go % go version go version go1.16.3 darwin/amd64 %
GOPATH設定
srcは管理されなくなったような気がするが、pkgとbinは使われているみたい
GOPATH用準備
% mkdir -p $HOME/work/go/{src,pkg,bin} % export GOPATH=$HOME/work/go
サンプルプロジェクト
ディレクトリ作成
% mkdir -p $HOME/work/golang/sample1 % cd $HOME/work/golang/sample1
go modules初期化
% go mod init sample1 go: creating new go.mod: module sample1 %
※モジュール名はローカルならプロジェクト名で良い、githubmなどに公開する場合はgithub/xxxxとかにしないといけない
go.modの中身
% cat go.mod module sample1 go 1.16 %
なんかパッケージを入れてみる
% go get github.com/labstack/echo/v4 go: downloading github.com/labstack/echo v1.4.4 go: downloading github.com/labstack/echo/v4 v4.2.2 go: downloading github.com/labstack/echo v3.3.10+incompatible go: downloading github.com/labstack/gommon v0.3.0 go: downloading golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a go: downloading golang.org/x/net v0.0.0-20200822124328-c89045814202 go: downloading github.com/mattn/go-colorable v0.1.7 go: downloading github.com/mattn/go-isatty v0.0.12 go: downloading github.com/valyala/fasttemplate v1.2.1 go: downloading golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6 go: downloading github.com/valyala/bytebufferpool v1.0.0 go: downloading golang.org/x/text v0.3.3 go get: added github.com/labstack/echo/v4 v4.2.2 %
↓
% cat go.mod module sample1 go 1.16 require github.com/labstack/echo/v4 v4.2.2 // indirect %
直接、go.modに編集しても良いらしい
サンプルコード
sample1.go
package main import ( "fmt" echo "github.com/labstack/echo/v4" "sample1/src/car" ) func main() { fmt.Println("aaa") fmt.Println(echo.Version) a := new(car.Car) a.Init() a.Msg() }
src/car/car.go
package car import "fmt" type Car struct { name string } func (p *Car) Msg() { fmt.Println(p.name) } func (p *Car) Init() { p.name = "くるま" }
以前はローカル環境の場合は相対パスでも動いていた気がしますが、 go modulesの場合はNGになったかもしれない
ディレクトリ構成
% tree . ├── go.mod ├── go.sum ├── sample1.go ├── src ├ └── car ├ └── car.go └── workspace.code-workspace
おまけ
vscode設定(setting.json)
"settings": { "go.gopath": "/Users/xxxx/work/go", ⇦ GOPATHの場所 "go.formatOnSave": true, "go.goroot": "/usr/local/Cellar/go/1.16.3/libexec" ⇦ GOROOTの場所 }
初回にデバッグ用ツールが入っていない場合はインストールするので定義した方が良い goparthを定義しないとデフォルトのGOPATHの場所になるので注意