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.

Izihloko ezihlobene