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