Tí a bá ti ń pín http.Client láàárín àwọn ìbéèrè àkókò kan náà, jẹ́ kí pápá Transport rẹ̀ dúró ṣinṣin. Àwra náà lè múṣọra irú transport tí a ṣètò ní kíkún tí ìrìn kọ̀ọ̀kan tó ń bọ̀ yóò gbà:

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()
}

Pẹ̀lú net/http àti sync, dá a sílẹ̀ kí o tó ṣe àtẹ̀jáde ẹ̀rọ náà:

slot := &routeSlot{current: initialTransport}
client := &http.Client{Transport: slot}

slot.Set(nextTransport)

initialTransport àti nextTransport gbọ́dọ̀ jẹ́ aláì-nil, tí a ṣètò ní kíkún àti ààbò sí ìṣeọ̀pọ̀. Kọ́ transport proxy kọ̀ọ̀kan kí o tó ṣe àtẹ̀jáde rẹ̀, kí o má sì yí ètò rẹ̀ padà nígbà tí àwọn ìbéèrè ń lò ó.

Ìtìsọ̀ náà ń dáàbò bo àwòrán atọ́ka nìkan, nítorí náà ìbéèrè tí ó lọra kò di ìtìsọ̀nà ipa mú fún gbogbo ìpààrọ̀ nẹ́tíwọ́kì rẹ̀. Ìbéèrè tí ó ti ń lo àwòrán tẹ́lẹ̀ ń tẹ̀síwájú lórí transport yẹn; ìyípadà kò tún ṣe é tàbí kò gbé àkópọ̀ rẹ̀ kúrò.

Pa àwọn transport àtijọ́ mọ́ kí o sì mú wọn jáde nípasẹ̀ ìgbésí-ayé tí ó ní ìlà ti app náà, jẹ́ kí iṣẹ́ tí ń lọ parí kí o sì ti àwọn adágún tí ó dùbúlẹ̀ mọ́ nígbà tí ó bá yẹ. Ìtúnjú sílẹ̀ lè fa RoundTrip mìíràn lẹ́yìn ìyípadà. Tí gbogbo ìṣàn iṣẹ́ bá nílò ipa kan, yàn ipa yẹn ní ààlà ìṣàn iṣẹ́ dípò yíyí olùyàn tí a pín yìí padà ní àárín.

Àwọn àpilẹ̀kọ tó jọra