我是 Go 新手,并尝试向多个 http/https 服务器生成多个请求,以检查每个 Web 服务器的响应时间和状态。


我将 URL 存储在一个文本文件中,之后我决定在我的代码中添加一个代码,该代码将在一定时间后继续在每个 URL 上生成这些请求(时间量以秒为单位在每个 URL 旁边键入并间隔一个标签)。


当我开始从文件中扫描时间时,一切都变得复杂了,我无法找到我的错误。这是我的 Go 代码:


package main


import (

    "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