Go Timeouts (Japanese)

"Timeouts" from golang wiki

Go公式WikiのTimeoutsの日本語意訳になります。
(元記事の最終更新日: 2014/12/10 rev.1)

タイムアウトに関する簡単な説明がされています。


タイムアウトとデッドライン

時間がかかりすぎる同期的な呼び出しを途中でやめるには、select文とtime.Afterを使います。

import "time"

c := make(chan error, 1)
go func() { c <- client.Call("Service.Method", args, &reply) } ()
select {
  case err := <-c:
    // エラーチェックと返信
  case <-time.After(timeoutNanoseconds):
    // タイムアウト呼び出し
}

チャネル c のバッファサイズは1です。
もしcがバッファなしチャネルでclient.CallメソッドがtimeoutNanoseconds以上の時間がかかった場合、チャネル送信が永遠にブロックされてしまい、ゴルーチンが破棄されなくなる可能性があります。

参考

 
comments powered by Disqus