[英]Why does dividing two time.durations in Go result in another time.duration?
我不明白划分時間意味着什么time.Duration
在Go中time.Duration
時間。
例如,這是非常可愛的:
d,_ := time.ParseDuration("4s")
fmt.Println(d/4)
打印1s
。 哪個是王牌,因為(幼稚)4秒除以4是1秒。
當我們發現分母中的4必須是持續時間時,它會有點混亂。 雖然:
d1 := time.Duration(4)
fmt.Println(d/d1)
還打印1s
,我們知道d1
實際上是4ns
,我完全不相信4秒除以4納秒是1秒。
我很困惑,因為持續時間除以持續時間應該是無量綱的(我認為,對吧?),而持續時間除以無量綱數應該有時間單位。
我知道那種類型!=單位,但我顯然誤解了某些東西,或者很可能是一組東西。 任何幫助清除這一點將是非常感謝!
這是上面例子中的游樂場。 https://play.golang.org/p/Ny2_ENRlX6 。 而對於上下文,我正在嘗試計算事件之間的平均時間。 我可以回到使用花車幾秒鍾,但我想留在時間time.Duration
土地。
在數學上,你是正確的:划分兩次.Durations應該產生無量綱的數量。 但這不是go的類型系統的工作方式。 任何數學運算都會產生與輸入相同類型的值。 您必須將除法的結果明確地轉換為int64以獲得“無類型”數量。
這是因為time.Duration
是int64
。 請參閱時間包的文檔。
你按照4(4ns)划分4000000000(4s),得到1000000000(1s)。 您應該查看操作,因為整數不是鍵入的值。 類型Duration
使其看起來像物理值,但對於除法運算,它只是一個數字。
時間沒有附加單位。 time.Duration
。 time.Duration
通過提供不同的類型,即time.Duration
類型,表示持續時間的物理概念(以秒為單位並以單位為單位)。 但從技術上講,它只是一個uint64
。
如果你試圖將實際單位附加到類型,你將輸入單位地獄:什么是(time.Duration * time.Duration)/加速度.Radial * mass.MetricTon? 最不可能是未定義的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.