Shintsha imigwaqo ye-proxy ye-HTTP ye-Go ngaphandle kokushintsha i-Client.Transport
Sebenzisa isembozo se-RoundTripper esivumelanisiwe ukushicilela i-proxy transport entsha elungisiwe ngaphandle kokushintsha inkambu ye-http.Client esebenzayo.
Uma i-http.Client isivele yabiwa izicelo ezenzeka ngasikhathi sinye, gcina inkambu yayo ye-Transport izinzile. Isembozo singavumelanisa ukuthi iyiphi i-transport elungiswe ngokugcwele etholwa uhambo ngalunye olulandelayo:
type routeSlot struct {
mu sync.RWMutex
current http.RoundTripper
}
func (s *routeSlot) RoundTrip(r *http.Request) (*http.Response, error) {
s.mu.RLock()
current := s.current
s.mu.RUnlock()
return current.RoundTrip(r)
}
func (s *routeSlot) Set(next http.RoundTripper) {
s.mu.Lock()
s.current = next
s.mu.Unlock()
}Ngokusebenzisa i-net/http ne-sync, yiqalise ngaphambi kokushicilela iklayenti:
slot := &routeSlot{current: initialTransport}
client := &http.Client{Transport: slot}
slot.Set(nextTransport)i-initialTransport ne-nextTransport kufanele zibe non-nil, zilungiswe ngokugcwele futhi ziphephe ekusebenzeni ngasikhathi sinye. Yakha i-transport ye-proxy ngayinye ngaphambi kokuyishicilela, futhi ushiye ukulungiselelwa kwayo kungashintshi ngenkathi izicelo ziyisebenzisa.
Isikhiya sivikela kuphela isithombe se-pointer, ngakho isicelo esinensayo asibambi isikhiya somzila kukho konke ukushintshana kwaso kwenethiwekhi. Isicelo esivele sisebenzisa isithombe esedlule siqhubeka kuleyo transport; ukushintsha akusiphindi futhi akusisusi ukuxhumana kwaso.
Gcina futhi uhoxise ama-transport amadala ngomjikelezo wokuphila wohlelo olilinganiselwe, uvumela umsebenzi oqhubekayo ukuthi uqede futhi uvale amachibi angenzi lutho lapho kufanele. Ukudlulisela kungenye indawo kungabangela enye i-RoundTrip ngemva kokushintsha. Uma wonke umjikelezo womsebenzi udinga umzila owodwa, yabela lowo mzila emngceleni womjikelezo womsebenzi esikhundleni sokushintsha lesi sikhethi esabiwe phakathi nendawo.