Chapter 12

おわりに

さき(H.Saki)
さき(H.Saki)
2021.08.28に更新

おわりに

というわけで、contextに関連する事項をまとめて紹介してきましたが、いかがでしたでしょうか。
contextは、database/sqlnet/httpのように現実の事象と対応している何かが存在するパッケージではないので、イマイチその存在意義や使い方がわかりにくいと思います。

そういう方々に対して、contextのわかりやすいユースケースや、使用の際の注意点なんかを伝えられていれば書いてよかったなと思います。

コメントによる編集リクエスト・情報提供等大歓迎です。
連絡先: 作者Twitter @saki_engineer

参考文献

書籍

書籍 Go言語による並行処理

https://learning.oreilly.com/library/view/go/9784873118468/

Goを書く人にはお馴染みの並行処理本です。
4.12節がまるまるcontextパッケージについての内容で、advancedな具体例をもとにcontextの有用性について記述しています。

書籍 Software Design 2021年1月号

https://gihyo.jp/magazine/SD/archive/2021/202101

Go特集の第4章の内容がcontextでした。
こちらについては、本記事ではあまり突っ込まなかった「キャンセル処理を行った後に、コンテキスト木がどのように変化するのか」などというcontextパッケージ内部の実装に関する話についても重点的に触れられています。

ハンズオン

ハンズオン 分かるゴールーチンとチャネル

https://github.com/gohandson/goroutine-ja

tenntennさんが作成されたハンズオンです。
STEP6にて、実際にcontext.WithCancelを使ってcontextを作ってキャンセル伝播させる、というところを体験することができます。

The Go Blog

Go Concurrency Patterns: Context

https://blog.golang.org/context

てっとり早くcontext4メソッドについて知りたいなら、このブログを読むのが一番早いです。
記事の後半部分ではGoogle検索エンジンもどきの実装を例に出して、contextが実際にどう使われるのかということをわかりやすく説明しています。

Contexts and structs

https://blog.golang.org/context-and-structs

「contextを構造体フィールドに入れるのではなく、関数の第一引数として明示的に渡すべき」ということに関して、1記事丸々使って論じています。

Go Concurrency Patterns: Pipelines and cancellation

https://blog.golang.org/pipelines

この記事の中にはcontextは登場しませんが、Doneメソッドにおける「chan struct{}を使ってキャンセル伝播する」という方法の元ネタがここで登場しています。