居酒屋に入って「取りあえずビール(中ジョッキ)」とやってしまうような感覚で、golang の引数に context があったら、上位から渡されたのがあればそれを、なければ context.Background() で与えていることが多い。
もう少し調べておこう。
まず、context.Background() はこれだ。
https://cs.opensource.google/go/go/+/release-branch.go1.21:src/context/context.go;l=211-213
backgroundCtx{} を返すだけで、NewBackgroundCtx() という名前にしたい気もするが、これはアドレスではなくインスタンスを返すから new が付かないのだろうか。
その下に context.TODO() もある。同じようにを todoCtx{} 返すだけである。
標準の context.Context はいくつあるのだろう?
目視なのでとりこぼしがあるかもしれない。
サンプルでよく見る context.Background() と context.TODO() だが、どちらも emptyCtx を組み込んだだけになっている。
context.Background() は「これで contextを始める!」という top-level の場合に使い、context.TODO() は「まだよくわからんけどこれでやっておこう」という unclear なときに使う。
cancelCtx は、名前からするとキャンセルを通知できるようになっているのだろう。
じゃあ withoutCancelCtx は? emptyCtx との違いは Value() があるくらいだろうか。cancelCtx を使っていたけどキャンセル機構をなくしたくなった場合とか?
いや、cancelCtx を直接作る関数は用意されていない(引数にcontextを取る)から扱いが違うんだろうか。
だいたい、なんで Background() などは type Context の下にあるのだろう? レシーバーがあれば Types の下になるのは分かるのだが、戻り値が1つでそれが type だったら Types の下にぶら下がるんだろうか。
こんなはっきりしない終わり方は嫌なので、ちゃんと context について説明しているサイトを読もう(この記事台無し......)!
よくわかるcontextの使い方
https://zenn.dev/hsaki/books/golang-context
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。