Beddel waddooyinka proxy HTTP ee Go iyada oo aan la beddelin Client.Transport
Isticmaal duubis RoundTripper isku-duwan si aad u daabacdo gaadiid proxy cusub oo habaysan iyada oo aan la beddelin goob http.Client nool.
Haddii http.Client horey loogu wadaago codsiyo isku mar ah, hay goobta Transport mid deggan. Duubisku waxa uu isku-dubaridi karaa gaadiidka si buuxda loo habeeyay ee safar kasta oo dambe helo:
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()
}Adigoo isticmaalaya net/http iyo sync, bilow ka hor inta aan la daabacin macmiilka:
slot := &routeSlot{current: initialTransport}
client := &http.Client{Transport: slot}
slot.Set(nextTransport)initialTransport iyo nextTransport waa in ay noqdaan kuwo aan nil ahayn, si buuxda loo habeeyay oo ammaan u ah isku-marista. Dhis gaadiid kasta oo proxy ah ka hor inta aan la daabacin, oo ka tag habayntiisa isbeddel la'aan inta codsiyadu isticmaalayaan.
Qufadku waxa uu ilaaliyaa oo kaliya sawirka tilmaamaha, sidaas darteed codsi gaabis ah ma hayo qufadka waddada inta lagu jiro dhammaan is-dhaafsiga shabakadda. Codsi horey u isticmaalayay sawirkii hore waxa uu ku sii socdaa gaadiidkaas; beddelku dib uma celiyo mana raro xidhiidhkiisa.
Hay oo howlgeli gaadiidka hore iyada oo loo marayo meertada nolosha xaddidan ee abka, u oggolow shaqada socota in ay dhammaato oo xidh barkadaha fadhiidka ah marka ku habboon. Dib-u-celin ayaa sababi karta RoundTrip kale ka dib beddel. Haddii dhammaan socodka shaqadu u baahan yahay hal waddo, u qoondee waddadaas xadka socodka shaqada halkii aad ka beddeli lahayd doorashadan la wadaago badhtamaha.