Go 言語で様々なことをやってみる練習リポジトリ
-
それなりに練習した
- 暗号理論(crypto パッケージ)の勉強: サンプル
- ファイル I/O の勉強: サンプル
(おかげで 公式ドキュメントを読む力がついたと思う) - ターミナル I/O の勉強: サンプル
- レイヤードアーキテクチャの勉強: サンプル01, サンプル02
- Go 言語でのテスト方法: サンプル, テスト駆動開発 書籍の要約, サンプル
- Server を立てる: サンプル
- ミドルウェア
-
ふつうに練習した
- Go Tour: サンプル
- シンプルなディレクトリ構成
- 外部パッケージのインストール
- JSON パッケージの勉強: サンプル
- VS Code in Container の設定
- GitHub の issue, pull Request の テンプレート作成
- GitHub でリポジトリにタグをつける方法と リリースノートの自動生成
- http リクエスト の GET と POST: サンプル
- template について: サンプル
- cookie について: サンプル
-
ちょっとだけ練習した
- テキストファイルの中身を暗号化するツール
- パスワード, 入力ファイルの path, 出力ファイルの path は JSON ファイルに書いて 読み込ませる
- ファイル, ターミナル I/O と crypto パッケージ
- PayPal の Sandbox 環境へリクエスト: API ドキュメント トップ(外部リンク), API ドキュメント(外部リンク)
- ClientID と Secret を JSON ファイル から取得する
- ClientID と Secret で BASIC 認証を通して Access Token を取得する
- Access Token をリクエストヘッダーに含めて Client Token を取得する
- GMO コインへリクエストして 暗号資産のレートを取得する: API ドキュメント トップ(外部リンク), API ドキュメント(外部リンク)
- API 叩いて シンボル(BTC, ETH など12種)の情報(価格など)を JSON で取得する
- CoinMarketCap へリクエストして 暗号資産のレートを取得する: サンプル, API ドキュメント トップ(外部リンク), API ドキュメント(外部リンク)
- API 叩いて シンボル(基本なんでも)の情報(価格など)を JSON で取得して構造体に格納する
- HTML のタイトルを取得する
- Docker
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
- 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 機能を提供します
コードの自動補完補完ツールらしい