go-training-composition
Go 言語で様々なことをやってみる練習リポジトリ
目的 Overview
Go でアプリを作るための以下の練習
-
それなりに練習した
-
ふつうに練習した
-
ちょっとだけ練習した
作ったもの
インストール方法 Install
環境 Requirement
使い方 Usage
VS Code の拡張機能 Remote - Containers(識別子: ms-vscode-remote.remote-containers) を使って開発する
コンテナ内で VS Code を起動し go 言語のための VS Code の拡張機能 Go(識別子: golang.go) を使う
golang.go
golang.go を使うために 様々なパッケージをインストールする必要がある
開発用の パッケージを Docker image に含めないようにするために
コンテナを起動した後の コンテナ内 VS Code でインストールする
VS Code の通知より install All をする(補完だけでいいなら gopls だけインストールでも良さそう)
コンテナ内の git では日本語が使えないため コミットするときは ローカルの git bash 等を使う
$ docker-compose build
# VS Code より Remote - Containers で接続する
# たまに .devcontainer\devcontainer.json の差分を検知して rebuild するような通知が来る
# その時は docker image も作り直されて 古い方の image が <none> になるため削除する
# VS Code の通知(golang.go)より install All をする
# 補完だけでいいなら 通知より gopls を install する
# (.devcontainer\devcontainer.json に自動で gopls だけはインストールするようにしてあるから すぐ終わるはず)
# 基本は VS Code 内のターミナルで良いが ローカルの PowerShell からアクセスしたくなった場合
$ docker-compose exec go_training bash
# 終えるとき
# VS Code より Remote - Containers で接続をやめる
$ docker-compose down
ちょっと前までは コンテナを落とさない運用を考えていた
でも最近は コンテナも削除している
一応コンテナを落とさない手順も書いておく
# VS Code より Remote - Containers で接続する前に
$ docker-compose up -d
# VS Code より Remote - Containers で接続する
# 終えるとき
# VS Code より Remote - Containers で接続をやめる
$ docker-compose stop
# 再開するとき
$ docker-compose start
# VS Code より Remote - Containers で接続する
ちなみに image の時点で go build は済んでおり
image から直接 run または docker-compose.yml の command をコメントアウトで build でコンパイルした go の コードが実行できる
$ docker container run --rm -d -p 8080:8080 --name check_go_training go1.17:training_composition_vscode_in_container
$ docker container stop check_go_training
最初に go のパッケージ管理ファイル go.mod を生成するコマンド
/go/src/github.com/ozaki-physics/go-training-composition# go mod init $REPOSITORY
外部パッケージのバージョンアップ
例として github.com/gin-gonic/gin をバージョンアップする
- コンテナにアタッチする
- パッケージのバージョンアップして go.mod を更新する
- コンテナを削除してもバージョンアップが反映されるように docker image を作り直す
$ docker-compose up -d
$ docker-compose exec go_training bash
# パッケージをインストールするときは go install が推奨(go get は非推奨)
# でもエラーで go get を使えと言われることもある
# go mod tidy を実行すると自動で整理してくれる
# パッケージのバージョンアップ
/go/src/github.com/ozaki-physics/go-training-composition# go get -d -v -u github.com/gin-gonic/gin
# 不要パッケージの削除
/go/src/github.com/ozaki-physics/go-training-composition# go mod tidy -v
$ docker-compose down
$ docker image rm go1.17:training_composition_vscode_in_container
# docker image の作り直し(Dockerfile で go.mod を元にインストールするような記述があるから)
$ docker-compose build
golang.go でインストールされるパッケージ
- Installing github.com/uudashr/gopkgs/v2/cmd/gopkgs (/go/bin/gopkgs) SUCCEEDED
gopkgs
インポートできるパッケージのリストを表示するツール
- Installing github.com/ramya-rao-a/go-outline (/go/bin/go-outline) SUCCEEDED
Go Outline
JSON 表現を抽出するためのシンプルなユーティリティ
- Installing github.com/cweill/gotests/gotests (/go/bin/gotests) SUCCEEDED
gotests
テスト生成ツール
- Installing github.com/fatih/gomodifytags (/go/bin/gomodifytags) SUCCEEDED
gomodifytags
golang の struct に タグを追加したり更新したりする
- Installing github.com/josharian/impl (/go/bin/impl) SUCCEEDED
impl
インターフェースを実装するためのメソッドスタブを生成
- Installing github.com/haya14busa/goplay/cmd/goplay (/go/bin/goplay) SUCCEEDED
goplay - The Go Playground Client
The Go Playground にコードを貼り付けつつ Web ページへ遷移する
- Installing github.com/go-delve/delve/cmd/dlv (/go/bin/dlv) SUCCEEDED
delve
デバッガ
- Installing github.com/go-delve/delve/cmd/dlv@master (/go/bin/dlv-dap) SUCCEEDED
delve
デバッガ
- Installing honnef.co/go/tools/cmd/staticcheck (/go/bin/staticcheck) SUCCEEDED
staticcheck
リンター linter
- Installing golang.org/x/tools/gopls (/go/bin/gopls) SUCCEEDED
gopls, the Go language server
Go チームによって開発された公式の Go 言語サーバーです
LSP 互換のエディターに IDE 機能を提供します
コードの自動補完補完ツールらしい
参考文献 References
Standard Go Project Layout
Go の公式 github