Canja hanyoyin wakilin HTTP na Go ba tare da canja Client.Transport ba
Yi amfani da naɗin RoundTripper mai aiki tare don wallafa sabon jigilar wakili da aka daidaita ba tare da canja filin http.Client mai rai ba.
Idan http.Client an riga an raba shi tsakanin buƙatun lokaci ɗaya, riƙe filin Transport ɗinsa a tsaye. Naɗi na iya daidaita wace cikakkiyar jigila da aka daidaita kowace tafiya ta gaba za ta karɓa:
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()
}Da net/http da sync, fara shi kafin wallafa abokin ciniki:
slot := &routeSlot{current: initialTransport}
client := &http.Client{Transport: slot}
slot.Set(nextTransport)initialTransport da nextTransport dole su zama masu ba-nil, cikakke da aka daidaita, kuma amintattu ga aiki tare. Gina kowace jigilar wakili kafin wallafa ta, kuma bar tsarin ta ba ya canzawa yayin da buƙatu ke amfani da ita.
Kulle yana kare hoton mai nuni ne kawai, don haka buƙata a hankali ba ta riƙe kullen hanya duk tsawon musayar cibiyar sadarwa. Buƙatar da ke amfani da hoton da ya gabata na ci gaba a kan wannan jigila; sauyin ba ya sake kunna ta ko motsa haɗin ta.
Riƙe kuma ka yi ritaya da tsofaffin jigila ta hanyar zagayowar rayuwa mai iyaka ta aikace-aikacen, barin aikin da ke gudana ya ƙare da kuma rufe wuraren da ba su aiki idan ya dace. Juyawa na iya haifar da wata RoundTrip bayan sauyi. Idan dukan aikin yana buƙatar hanya ɗaya, sanya wannan hanya a iyakar aikin maimakon canja wannan zaɓi da aka raba a tsakiyar hanya.