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.

Ailt ghaolmhara