Как в Golang задать proxy для http-запросов

Допустим нужно запросить данные с какого-либо сайта, но делать это нужно через прокси-сервер. Вариантов как это сделать множество. Рассмотрим некоторые из них. Самый очевидный, если вы используете стандартный http-клиент, сконфигурировать его:

var proxy = "http://" + user + ":" + password + "@" + ip + ":" + port
//creating the proxyURL
proxyURL, err := url.Parse(proxy)
if err != nil {
	log.Println(err)
}
transport := &http.Transport{
	Proxy: http.ProxyURL(proxyURL),
}
//adding the Transport object to the http Client
client := &http.Client{
	Transport: transport,
	Timeout: time.Second * timeout,
}

После чего все запросы сделанные через client будут проксироваться.

Также можно на лету менять прокси для клиента:

client.Transport = transport

В остальном

    //generating the HTTP GET request
    request, err := http.NewRequest("GET", url.String(), nil)
    if err != nil {
        log.Println(err)
    }
    //calling the URL
    response, err := client.Do(request)
    if err != nil {
        log.Println(err)
    }
    //getting the response
    data, err := ioutil.ReadAll(response.Body)
    if err != nil {
        log.Println(err)
    }
    //printing the response
    log.Println(string(data))

Однако, стандартный http-клиент в Golang плохо работает с ошибками возникающими во время запроса и производить отладку бывает затруднительно.