当然と言えば当然なんですけど、特に panic とかそういうことはなく、一瞬でタイムアウトします。まぁ、どうと言うことは無いですが、設定ファイルとかで未定義時に0が来るような実装になっている場合はなんか処理する(0の時は処理をしない、というのは多分あんまりなさそうですし)必要がありますね。
| |
https://play.golang.org/p/63DkfIEImjv
もうちょっと細かい話
さすがに短すぎるので、もう少し細かい実装の話。
context.WithTimeoutは内部的には特別な実装は無くて、context.WithDeadlineをtime.Now.Add(timeout)に対して呼んでいます。
で、context.WithDeadlineは返値を返す前にtime.Untilを使って現在時刻とデッドラインまでの差分をチェックしていて、これが0以下ならその場でキャンセル関数を呼んで
います。
まぁそんなわけで、余分な待ち時間が発生することもなく、time.WithTimeoutを呼んだ時点でちゃんとタイムアウトされる、ということでした。ちゃんちゃん。
