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 එකක් ඇති කළ හැක. සම්පූර්ණ කාර්ය ප්‍රවාහයකට එක් මාර්ගයක් අවශ්‍ය නම්, මෙම හවුල් තේරීම මැදින් වෙනස් කරනවා වෙනුවට කාර්ය ප්‍රවාහයේ මායිමේදී එම මාර්ගය පවරන්න.

අදාළ ලිපි