Jeśli ktoś nadal znajduje odpowiedzi, jak to zrobić, to właśnie ja to robię.
package main
import (
"bytes"
"io/ioutil"
"log"
"net/http"
"time"
)
var httpClient *http.Client
const (
MaxIdleConnections int = 20
RequestTimeout int = 5
)
func init() {
httpClient = createHTTPClient()
}
func createHTTPClient() *http.Client {
client := &http.Client{
Transport: &http.Transport{
MaxIdleConnsPerHost: MaxIdleConnections,
},
Timeout: time.Duration(RequestTimeout) * time.Second,
}
return client
}
func main() {
endPoint := "https://localhost:8080/doSomething"
req, err := http.NewRequest("POST", endPoint, bytes.NewBuffer([]byte("Post this data")))
if err != nil {
log.Fatalf("Error Occured. %+v", err)
}
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
response, err := httpClient.Do(req)
if err != nil && response == nil {
log.Fatalf("Error sending request to API endpoint. %+v", err)
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatalf("Couldn't parse response body. %+v", err)
}
log.Println("Response Body:", string(body))
}
Go Playground: http://play.golang.org/p/oliqHLmzSX
Podsumowując, tworzę inną metodę tworzenia klienta HTTP i przypisywania go do zmiennej globalnej, a następnie używam jej do wykonywania żądań. Zanotuj
defer response.Body.Close()
Spowoduje to zamknięcie połączenia i ponowne ustawienie go w stan gotowości do ponownego użycia.
Mam nadzieję, że to komuś pomoże.