我是 Go 新手,并嘗試向多個 http/https 服務器生成多個請求,以檢查每個 Web 服務器的響應時間和狀態。我將 URL 存儲在一個文本文件中,之后我決定在我的代碼中添加一個代碼,該代碼將在一定時間后繼續在每個 URL 上生成這些請求(時間量以秒為單位在每個 URL 旁邊鍵入并間隔一個標簽)。當我開始從文件中掃描時間時,一切都變得復雜了,我無法找到我的錯誤。這是我的 Go 代碼:package mainimport ( "fmt" "io/ioutil" "log" "net/http" "strconv" "strings" "sync" "time")func get_resp_time(url string) { //Get time for each URL time_start := time.Now() fmt.Println("Start time", time_start, " URL ", url) resp, err := http.Get(url) //fmt.Printf("resp : %#v \n", resp) if err != nil { log.Printf("Error fetching: %v", err) } defer resp.Body.Close() fmt.Println(time.Since(time_start), url, " Status: ", resp.Status)}func main() { content, _ := ioutil.ReadFile("url_list.txt") lines := strings.Split(string(content), "\t") //fields := strings.Split(string(content), "\t") //fmt.Println(lines[1]) //fmt.Println(strconv.Atoi(lines[0])) const workers = 25 var nb int wg := new(sync.WaitGroup) in := make(chan string, 2*workers) if _, err := strconv.Atoi(lines[1]); err == nil { nb, err = strconv.Atoi(lines[1]) } ticker := time.NewTicker(time.Second * time.Duration(nb)) for t := range ticker.C { fmt.Println("Time of origin: ", time.Now()) for i := 0; i < len(lines)-1; i++ { wg.Add(1) go func() { defer wg.Done() //for j := 0; j < len(in); j++ { if _, err := strconv.Atoi(lines[i]); err == nil { nb, err = strconv.Atoi(lines[i]) //get_resp_time(url) } else { get_resp_time(lines[i]) } //} }() } for _, url := range lines { if url != "" { in <- url } } fmt.Println("Tick at ", t) } close(in) wg.Wait()}和文本文件:http://google.com 5 http://nike.com 10 編輯:好吧,我只是將文件更改為只有一個持續時間,因為顯然擁有多個持續時間非常復雜(根據我的項目顧問)。謝謝您的幫助!
- 1 回答
- 0 關注
- 309 瀏覽
添加回答
舉報
0/150
提交
取消