我正在与gobench合作,帮助我们测试请求并提供一些有关性能的指标。
我做了一个修改,在每次通话中发送我需要测试的网址。但是我发现它无法将该功能调用两次或更多次。
func GobenchMain(currectRoute *string) {
startTime := time.Now()
var done sync.WaitGroup
results := make(map[int]*Result)
...
}
之后我意识到gobench文件的问题就在这一部分:
signalChannel := make(chan os.Signal, 2)
signal.Notify(signalChannel, os.Interrupt, syscall.SIGTERM)
go func() {
_ = <-signalChannel
printResults(results, startTime)
os.Exit(0)
}()
最后,这是我期望进行调用的方式,并且这样做会产生更多的请求。
package main
import (
"fmt"
"gobench"
)
var searchRoutes = []string{
"http:www.myurl.com/request1",
"http:www.myurl.com/request2",
"http:www.myurl.com/request3",
"http:www.myurl.com/request4",
}
func main() {
for i := 0; i < len(searchRoutes); i++ {
gobench.GobenchMain(&searchRoutes[i])
}
...
}
我怎么能一次打电话给我的GobeachMain? ;目前使用类似的代码它只能调用一次,因为在gobench得到结果后,os.exit(0),如果我删除这一行,程序就会立即停止
答案 0 :(得分:3)
gobench
从未被设计为用作库。
只需调用类似这样的二进制文件
package main
import (
"log"
"os/exec"
)
func gobench(url string) {
cmd := exec.Command("gobench", url)
err := cmd.Run()
if err != nil {
log.Fatalf("Command finished with error: %v", err)
}
}
var searchRoutes = []string{
"http:www.myurl.com/request1",
"http:www.myurl.com/request2",
"http:www.myurl.com/request3",
"http:www.myurl.com/request4",
}
func main() {
for i := 0; i < len(searchRoutes); i++ {
gobench(searchRoutes[i])
}
}