Date / Time
time.Duration: 無単位の整数はナノ秒として扱われる
time.Durationへ直接渡した整数は、ミリ秒でなくナノ秒を表します。
Sourceduration.go
Go 1.22
package timevalue
import "time"
func TimeoutFromNumber(value time.Duration) time.Duration {
return value
}
func TimeoutInMilliseconds(value int) time.Duration {
return time.Duration(value) * time.Millisecond
}Testduration_test.go
Go 1.22
package timevalue
import (
"testing"
"time"
)
func Test無単位のDurationはナノ秒として扱われる(t *testing.T) {
if got := TimeoutFromNumber(100); got != 100*time.Nanosecond {
t.Fatalf("TimeoutFromNumber(100) = %s, want 100ns", got)
}
if got := TimeoutInMilliseconds(100); got != 100*time.Millisecond {
t.Fatalf("TimeoutInMilliseconds(100) = %s, want 100ms", got)
}
}01Assertion
このテストで確認できること
- time.Duration(100)は100nsになる
- 100 * time.Millisecondで100msになる
設定値や数値リテラルをDurationへ変換するときは、必ずtime.Secondやtime.Millisecondを掛けて単位をコードに残します。単位なしの変換は、想定より極端に短いtimeoutを作ります。
OBSERVED RESULT
time.Duration(100) → 100ns
100 * time.Millisecond → 100ms