簡體   English   中英

為什么在Go中將兩個time.durations分成另一個time.duration?

[英]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.Durationint64 請參閱時間包的文檔。

你按照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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM