Nếu ai đó vẫn đang tìm câu trả lời về cách thực hiện, đây là cách tôi đang làm.
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))
}
Đi đến sân chơi: http://play.golang.org/p/oliqHLmzSX
Tóm lại, tôi đang tạo một phương thức khác để tạo một máy khách HTTP và gán nó cho biến toàn cục, sau đó sử dụng nó để đưa ra yêu cầu. Lưu ý
defer response.Body.Close()
Thao tác này sẽ đóng kết nối và đặt nó sẵn sàng để sử dụng lại.
Hy vọng điều này sẽ giúp một ai đó.