د Go HTTP پروکسي لارې بدلول پرته له دې چې Client.Transport بدل شي
د فعال http.Client ساحې د بدلولو پرته د نوي ترتیب شوي پروکسي ټرانسپورټ خپرولو لپاره همغږی شوی RoundTripper پوښ وکاروئ.
که http.Client لا دمخه د هممهاله غوښتنو لخوا شریک وي، د هغې Transport ساحه ثابته وساتئ. پوښ کولی شي همغږي کړي چې هر راتلونکی پړاو کوم بشپړ ترتیب شوی ټرانسپورټ ترلاسه کوي:
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()
}د net/http او sync په کارولو سره، د مراجع خپرولو دمخه یې پیل کړئ:
slot := &routeSlot{current: initialTransport}
client := &http.Client{Transport: slot}
slot.Set(nextTransport)initialTransport او nextTransport باید non-nil، بشپړ ترتیب شوي او د هممهالتیا لپاره خوندي وي. هر پروکسي ټرانسپورټ د خپرولو دمخه جوړ کړئ، او تر هغه چې غوښتنې ترې کار اخلي د هغې ترتیب بدل نه کړئ.
لاک یوازې د پواینټر سناپ شاټ ساتنه کوي، نو ورو غوښتنه د خپل ټول شبکوي تبادلې په اوږدو کې د لارښوونې لاک نه نیسي. هغه غوښتنه چې لا دمخه پخوانی سناپ شاټ کاروي په هماغه ټرانسپورټ دوام کوي؛ بدلون هغه بیا نه چلوي او نه یې اړیکه ځای په ځای کوي.
زاړه ټرانسپورټونه د اپلیکیشن د محدود ژوند چرخې له لارې وساتئ او تقاعد یې کړئ، پر مخ تلونکي کار ته اجازه ورکړئ چې بشپړ شي او کله چې مناسب وي بېکاره حوضونه بند کړئ. بیاځلې لارښوونه کولی شي د بدلون وروسته بله RoundTrip رامنځته کړي. که ټول کاري بهیر یوې لارې ته اړتیا لري، دا لار د کاري بهیر په پوله وټاکئ، نه دا چې دا شریک ټاکونکی په نیمه لار کې بدل کړئ.