3 回答

TA貢獻1875條經(jīng)驗 獲得超5個贊
嘗試這個:
package main
import (
"fmt"
"time"
)
func main() {
a := 1 * time.Second
b := 10 * time.Second
c := absDiff(a, b)
fmt.Println(c) // 9s
fmt.Println(absDiff(b, a)) // 9s
}
func absDiff(a, b time.Duration) time.Duration {
if a >= b {
return a - b
}
return b - a
}
這是另一種形式:
package main
import (
"fmt"
"time"
)
func main() {
a := 1 * time.Second
b := 10 * time.Second
c := abs(a - b)
fmt.Println(c) // 9s
}
func abs(a time.Duration) time.Duration {
if a >= 0 {
return a
}
return -a
}

TA貢獻1815條經(jīng)驗 獲得超10個贊
去1.19
該函數(shù)Abs
已添加到該語言中,因此您可以直接使用該函數(shù),而不必自行編寫:
func main() {
? ? d1 := time.Second * 10
? ? d2 := time.Second
? ? sub1 := d1 - d2
? ? sub2 := d2 - d1
? ? fmt.Println(sub1.Abs()) // 9s
? ? fmt.Println(sub2.Abs()) // 9s
}

TA貢獻1811條經(jīng)驗 獲得超5個贊
一個優(yōu)雅的解決方案是使用 bitshift >>
func absDuration(d time.Duration) time.Duration {
s := d >> 63
return (d ^ s) - s
}
如果左操作數(shù)為負,Golang 中的位移位就是邏輯
- 3 回答
- 0 關(guān)注
- 177 瀏覽
添加回答
舉報