我正在使用 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/1000
或 jitter = jitter/1000
(将微秒转换为毫秒)时,我得到的是纳秒抖动:(。有吗以任何方式为延迟和抖动获得相同的单位毫秒。
原文由 supriya 发布,翻译遵循 CC BY-SA 4.0 许可协议
编号为
time.Duration
time.Duration
是一种以int64
作为其 基础类型 的类型,它以纳秒为单位存储持续时间。如果您知道该值但您想要的不是纳秒,只需乘以您想要的单位,例如:
上面的工作是因为
100
是一个无类型 常量,它可以自动转换为time.Duration
它有int64
底层类型—请注意,如果您将值作为类型值,则必须使用显式 类型转换:
time.Duration
数字所以
time.Duration
始终是纳秒。例如,如果您需要以毫秒为单位,您需要做的就是将time.Duration
值除以毫秒中的纳秒数:其他例子:
尝试 Go Playground 上的示例。
如果您的抖动(持续时间)小于您希望将其转换为的单位,则需要使用浮点除法,否则将执行整数除法,从而切断小数部分。详情参见: Golang Round to Nearest 0.05 。
在划分之前将抖动和单位转换为
float64
:输出(在 Go Playground 上尝试):