Athraigh bealaí seachfhreastalaí HTTP Go gan Client.Transport a mhúchadh
Úsáid fillteán RoundTripper sioncronaithe chun iompróir seachfhreastalaí nuachumraithe a fhoilsiú gan réimse beo http.Client a mhúchadh.
Má tá http.Client roinnte cheana ag iarratais chomhthreomhara, coinnigh a réimse Transport seasmhach. Is féidir le fillteán a shioncronú cén t-iompróir lánchumraithe a fhaigheann gach turas ina dhiaidh:
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()
}Ag baint úsáide as net/http agus sync, cuir tús leis sula bhfoilsítear an cliant:
slot := &routeSlot{current: initialTransport}
client := &http.Client{Transport: slot}
slot.Set(nextTransport)Caithfidh initialTransport agus nextTransport a bheith neamh-nialasach, lánchumraithe agus sábháilte ó thaobh comhthreomhaireachta de. Tóg gach t-iompróir seachfhreastalaí sula bhfoilsítear é, agus fág a chumraíocht gan athrú fad a bhíonn iarratais á úsáid.
Ní chosnaíonn an glas ach smeachóireacht an phointeora, mar sin ní choinníonn iarratas mall an glas ródaithe ar feadh a mhalartaithe líonra ar fad. Leanann iarratas atá ag úsáid na smeachóireachta roimhe ar an iompróir sin; ní athsheinneann an t-athrú é ná ní aistríonn a nasc.
Coinnigh agus scoir seaniompróirí trí shaolré teoranta an fheidhmchláir, ag ligean d'obair atá ar siúl críochnú agus ag dúnadh linnte díomhaoin nuair is cuí. Is féidir le atreorú RoundTrip eile a spreagadh tar éis athraithe. Más gá bealach amháin le haghaidh sreabhadh oibre iomlán, sann an bealach sin ag teorainn an tsreafa oibre seachas an roghnóir comhroinnte seo a athrú leathbhealaigh tríd.