转到测试网站状态(ping)

Is there any other better way to ping websites and check if the website is available or not?

I just need to get the status code not get(download) all websites...

func Ping(domain string) int {
    timeout := time.Duration(2 * time.Second)
    dialTimeout := func(network, addr string) (net.Conn, error) {
        return net.DialTimeout(network, addr, timeout)
    }
    transport := http.Transport{
        Dial: dialTimeout,
    }
    client := http.Client{
        Transport: &transport,
    }
    url := "http://" + domain
    req, _ := http.NewRequest("GET", url, nil)
    resp, _ := client.Do(req)
    return resp.StatusCode
}

This function is too slow and when I run with goroutines, it goes over the limits and gives me the errors...

Thanks!

  • Use a single transport. Because the transport maintains a pool of connections, you should not create and ignore transports willy nilly.
  • Close the response body as described at the beginning of the net/http doc.
  • Use HEAD if you are only interested in the status.
  • Check errors.

Code:

var client = http.Client{
  Transport: &http.Transport{
    Dial: net.Dialer{Timeout: 2 * time.Second}.Dial,
  },
}

func Ping(domain string) (int, error) {
    url := "http://" + domain
    req, err := http.NewRequest("HEAD", url, nil)
    if err != nil {
       return 0, err
    }
    resp, err := client.Do(req)
    if err != nil {
       return 0, err
    }
    resp.Body.Close()
    return resp.StatusCode, nil
}