我正在尝试使用github.com/sparrc/go-ping
和goroutines同时ping通各种主机。问题是似乎所有goroutine之间都共享“统计信息”。这意味着“状态”在所有goroutine中的值都大致相同。对我来说,它们应该成为每个goroutine的“ stats”实例。令我感到困惑的是,即使对于一个不存在的主机,统计数据中也包含着价值。我在想可能无法从套接字使用ICMP对多个主机执行ping操作,但是显然我能够从PowerShell中执行此类操作。
这是我的代码:
package main
import (
"fmt"
"sync"
"github.com/sparrc/go-ping"
)
var wg sync.WaitGroup
func pingfunc(ip string){
defer wg.Done()
pinger, err := ping.NewPinger(ip)
pinger.SetPrivileged(true)
if err != nil {
panic(err)
}
pinger.Count = 3
pinger.OnFinish = func(stats *ping.Statistics) {
fmt.Println(stats)
}
pinger.Run() // blocks until finished
}
func main() {
ips := [4]string{"172.26.236.3",
"172.26.236.5",
"172.26.236.10",
"172.26.2.20"}//this host doesn't exist
for _,s := range ips{
wg.Add(1)
go pingfunc(s)
}
wg.Wait()
}
输出:
&{3 2 -50 172.26.236.3 172.26.236.3 [12.9656ms 12.9656ms 11.9679ms] 11.9679ms 12.9656ms 12.633033ms 470.32µs}
&{3 2 -50 172.26.236.10 172.26.236.10 [12.9656ms 12.9656ms 11.9679ms] 11.9679ms 12.9656ms 12.633033ms 470.32µs}
&{3 3 0 172.26.2.20 172.26.2.20 [12.9656ms 14.9603ms 17.166ms] 12.9656ms 17.166ms 15.030633ms 1.715527ms}
&{3 3 0 172.26.236.5 172.26.236.5 [12.9656ms 14.9603ms 17.166ms] 12.9656ms 17.166ms 15.030633ms 1.715527ms}1.850632ms}