タグ

GoLangとcontextに関するclavierのブックマーク (3)

  • http.Response を返すような関数は作らないのが賢明 - 誰かの役に立てばいいブログ

    Go 1.7 から体に入った context パッケージは便利、というより今や必須の道具です。以下のように書くことで、一定時間で処理をキャンセルできたりします。 func slowOperationWithTimeout(ctx context.Context) (Result, error) { ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) defer cancel() // releases resources if slowOperation completes before timeout elapses return slowOperation(ctx) } defer cancel() とありますが、このようにしないとリソースリークするので context 使うときはこう書くのがパターンです。 さて

    http.Response を返すような関数は作らないのが賢明 - 誰かの役に立てばいいブログ
  • golangでcontextパッケージを使う - write ahead log

    使わないから全然覚えられない. とりあえずサンプルを書いて覚えておく. 詳細や思想はdeeeetさんの記事が非常にわかりやすいのでこれ読めばそれでいいと思う. 大雑把な理解 context.Backgroundでcontextを作るか, よそからもらってきたcontextを使って With****メソッドを使ってcontextに意味を持たせる 結果や値はcontextオブジェクトの中に入ってる メソッド With****メソッドは以下がある. メソッド名 用途 WithCancel キャンセル可能にする WithTimeout 一定時間でキャンセルされるようにする WithDeadline 指定時間でキャンセルされるようにする WithValue 値を一緒に引き渡す どれも新しいcontextオブジェクトを返してくれる. メンバ contextのインターフェースは以下のメンバでとてもシンプ

    golangでcontextパッケージを使う - write ahead log
  • sync.ErrGroupで複数のgoroutineを制御する

    Golangの並行処理は強力である一方で同期処理を慎重に実装する必要がある.“Go 言語における並行処理の構築部材”にまとめられているようにGolangは様々な方法でそれを実装することができる.実現したいタスクに合わせてこれらを適切に選択する必要がある. この同期処理の機構として新たにgolang.org/x/sync/errgroupというパッケージが登場した.実際に自分のツールで使ってみて便利だったので簡単に紹介する. 使いどころ 時間のかかる1つのタスクを複数のサブタスクとして並行実行しそれらが全て終了するのを待ち合わせる処理(Latch)を書きたい場合にerrgroupは使える.その中でも「1つでもサブタスクでエラーが発生した場合に他のサブタスクを全てを終了しエラーを返したい」(複数のサブタスクが全て正常に終了して初めて1つの処理として完結する)場合が主な使いどころである. 実例

  • 1