Minta tetapan tamat masa dan amalan terbaik untuk http.Transport dalam bahasa Go
Dalam bahasa Go, http.Transport ialah perpustakaan permintaan rangkaian yang penting. Ia menyediakan satu siri kaedah dan pilihan untuk menetapkan tamat masa permintaan untuk membantu pembangun mengawal masa pelaksanaan permintaan dengan lebih baik dan mengelakkan pembaziran sumber. Artikel ini menerangkan cara untuk menetapkan tamat masa permintaan dan memberikan beberapa contoh kod untuk amalan terbaik.
Dalam http.Transport, anda boleh menggunakan dua kaedah berikut untuk menetapkan tempoh tamat masa permintaan:
Tamat masa ialah medan http.Transport, mengikut jenis masa .Tempoh. Dengan menetapkan Tamat Masa, anda boleh menentukan tamat masa untuk keseluruhan permintaan, termasuk semua proses seperti mewujudkan sambungan, menghantar permintaan dan menerima respons. Contohnya adalah seperti berikut:
package main import ( "net/http" "time" ) func main() { transport := &http.Transport{ // 设置请求超时时间为5秒 Timeout: 5 * time.Second, } client := &http.Client{ Transport: transport, } resp, err := client.Get("http://example.com") if err != nil { // 处理错误 return } // 处理响应 defer resp.Body.Close() }
Tarikh akhir ialah medan http.Permintaan, taip ialah masa.Masa. Dengan menetapkan tarikh akhir, anda boleh menetapkan tamat masa bebas untuk satu permintaan. Contohnya adalah seperti berikut:
package main import ( "net/http" "time" ) func main() { req, err := http.NewRequest("GET", "http://example.com", nil) if err != nil { // 处理错误 return } // 设置请求超时时间为5秒 req.Header.Set("Timeout", "5s") req = req.WithContext(http.TimeoutContext(req.Context(), 5*time.Second)) client := &http.Client{} resp, err := client.Do(req) if err != nil { // 处理错误 return } // 处理响应 defer resp.Body.Close() }
Dalam pembangunan sebenar, kita perlu menetapkan tamat masa permintaan mengikut senario dan keperluan tertentu. Berikut ialah contoh kod untuk beberapa amalan terbaik:
Anda boleh menetapkan tamat masa lalai global untuk semua permintaan sepanjang aplikasi anda. Ini meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Contohnya adalah seperti berikut:
package main import ( "net/http" "time" ) var client = &http.Client{ Transport: &http.Transport{ // 设置全局默认超时时间为10秒 Timeout: 10 * time.Second, }, } func main() { resp, err := client.Get("http://example.com") if err != nil { // 处理错误 return } // 处理响应 defer resp.Body.Close() }
Untuk permintaan yang berbeza, anda boleh menetapkan tamat masa yang berbeza. Sebagai contoh, untuk antara muka API yang berbeza, tamat masa boleh ditetapkan mengikut ciri antara muka dan keperluan masa tindak balas. Contohnya adalah seperti berikut:
package main import ( "net/http" "time" ) func main() { apiA := &http.Client{ Transport: &http.Transport{ // 设置API A的超时时间为3秒 Timeout: 3 * time.Second, }, } apiB := &http.Client{ Transport: &http.Transport{ // 设置API B的超时时间为5秒 Timeout: 5 * time.Second, }, } respA, err := apiA.Get("http://apiA.example.com") if err != nil { // 处理错误 return } respB, err := apiB.Get("http://apiB.example.com") if err != nil { // 处理错误 return } // 处理响应 defer respA.Body.Close() defer respB.Body.Close() }
Artikel ini memperkenalkan cara untuk menetapkan tamat masa permintaan http.Transport dalam bahasa Go dan memberikan beberapa kod contoh amalan terbaik. Dalam pembangunan sebenar, menetapkan tamat masa permintaan secara fleksibel mengikut keperluan dan senario tertentu boleh meningkatkan prestasi dan kebolehpercayaan aplikasi.
Atas ialah kandungan terperinci Minta tetapan tamat masa dan amalan terbaik untuk http.Transport dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!