time.Duration类型微秒值到毫秒的转换

新手上路,请多包涵

我正在使用 golang 的 go-ping ( https://github.com/sparrc/go-ping ) 库进行非特权 ICMP ping。

 timeout := time.Second*1000
interval := time.Second
count := 5
host := p.ipAddr
pinger, cmdErr := ping.NewPinger(host)

pinger.Count = count
pinger.Interval = interval
pinger.Timeout = timeout
pinger.SetPrivileged(false)
pinger.Run()
stats := pinger.Statistics()

latency = stats.AvgRtt  // stats.AvgRtt is time.Duration type
jitter = stats.StdDevRtt// stats.StdDevRtt is time.Duration type

通过运行它,我得到了以毫秒为单位的延迟和以微秒为单位的抖动。我想要相同的单位让我们说毫秒所以当我做 jitter = stats.StdDevRtt/1000jitter = jitter/1000 (将微秒转换为毫秒)时,我得到的是纳秒抖动:(。有吗以任何方式为延迟和抖动获得相同的单位毫秒。

原文由 supriya 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.3k
2 个回答

编号为 time.Duration

time.Duration 是一种以 int64 作为其 基础类型 的类型,它以纳秒为单位存储持续时间。

如果您知道该值但您想要的不是纳秒,只需乘以您想要的单位,例如:

 d := 100 * time.Microsecond
fmt.Println(d) // Output: 100µs

上面的工作是因为 100 是一个无类型 常量,它可以自动转换为 time.Duration 它有 int64 底层类型—

请注意,如果您将值作为类型值,则必须使用显式 类型转换

 value := 100 // value is of type int

d2 := time.Duration(value) * time.Millisecond
fmt.Println(d2) // Output: 100ms

time.Duration 数字

所以 time.Duration 始终是纳秒。例如,如果您需要以毫秒为单位,您需要做的就是将 time.Duration 值除以毫秒中的纳秒数:

 ms := int64(d2 / time.Millisecond)
fmt.Println("ms:", ms) // Output: ms: 100

其他例子:

 fmt.Println("ns:", int64(d2/time.Nanosecond))  // ns: 100000000
fmt.Println("µs:", int64(d2/time.Microsecond)) // µs: 100000
fmt.Println("ms:", int64(d2/time.Millisecond)) // ms: 100

尝试 Go Playground 上的示例。

如果您的抖动(持续时间)小于您希望将其转换为的单位,则需要使用浮点除法,否则将执行整数除法,从而切断小数部分。详情参见: Golang Round to Nearest 0.05

在划分之前将抖动和单位转换为 float64

 d := 61 * time.Microsecond
fmt.Println(d) // Output: 61µs

ms := float64(d) / float64(time.Millisecond)
fmt.Println("ms:", ms) // Output: ms: 0.061

输出(在 Go Playground 上尝试):

 61µs
ms: 0.061

原文由 icza 发布,翻译遵循 CC BY-SA 4.0 许可协议

从 Go 1.13 开始,您可以使用新的 Duration 方法 MicrosecondsMilliseconds 将持续时间作为其各自命名单元的整数计数返回。

https://golang.org/doc/go1.13#time

原文由 Xesina 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题