Goで開発して4年のプラクティスまとめ

のリバイバル記事を作る
1記事にまとめたかったけど結局4個に分割した都合上1記事にトピックを詰め込み過ぎでセルフチェックが苦しかったからもっと粒度を細かくする

part1:プロジェクトを始める
の内容ほぼそのまま
読み物系へのリンク、go moduleのセットアップ、など
文章はもうちょい見直そうかな?
dockerの話は削る

transparent proxyを用いてproxy設定しないでいいようにする方法についても考えたい

part2: dockerによるビルド
CGO_ENABLEDがとうのとかマルチプラットフォームの話を含めたい
もしかしたら永遠に欠番かも…
rancher desktopだとbuildkitのbind mountがうまくいかないのでCOPY . .したほうがいいとかそういう話を入れとく

part3: error handling
からエラーハンドリング周りの話だけ抜き出す
とくにiteratorの追加でcollectorの中で処理を中断できないシグネチャのものにはpanic-recoverで抜け出すとか前よりよくやるようになると思うのでそのへんの話も補う

part4: fileとio
からファイル関連の話を抜き出してio周りの話を追加する
ファイル同士のコピーをどうやるのかが最初わからなくて困ったので、そのへんの話を補う

- fdをdupする方法はosパッケージでは提供されないがio.SectionReader/io.OffsetWriterが代わりに使える

part6: cli

- stdのflagの高すぎる表現能力について
- github.com/spf13/cobraを使ったサブコマンドの実装
- github.com/rivo/tviewを用いたTUIの作成
tviewは使ったことないので長いこと欠番の可能性あり

part7: environment variable

- environment variableとは何ぞや。~C言語で環境変数を破壊するサンプルを添えて~
- os.Getenv / os.LookupEnv / os.Setenv
- github.com/caarlos0/env
- github.com/joho/godotenv
- dot env fileを書き出す(github.com/alessio/shellescapeでエスケープしてKEY=VALUE形式にするだけ)

part 8: concurrent Go
ほぼ上記と同じ内容(文章は見直す)

part 9: http client / server
からclientとserverの話だけを抜き出す

part 10: structured logging
のloggerの話だけを抜き出す。余計な話は抜く(めちゃくちゃ勘違いを招くので)

part 11: test
testとかoverlayとか

gotest.tools
はgithub.com/google/go-cmpを内包してるから便利だったり

part 12: file system abstraction
os.Root
をベースに新しく作るのもありか