ប្រសិនបើ http.Client ត្រូវបានចែករំលែកដោយសំណើដំណាលគ្នារួចហើយ សូមរក្សា field Transport របស់វាឱ្យនៅថេរ។ Wrapper អាចធ្វើសមកាលកម្ម 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 សូមចាប់ផ្តើមវាមុនពេលផ្សព្វផ្សាយ client:

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

slot.Set(nextTransport)

initialTransport និង nextTransport ត្រូវតែ non-nil កំណត់រចនាសម្ព័ន្ធពេញលេញ និងមានសុវត្ថិភាពចំពោះភាពដំណាលគ្នា។ សាងសង់ transport proxy នីមួយៗមុនពេលផ្សព្វផ្សាយ ហើយទុកការកំណត់រចនាសម្ព័ន្ធរបស់វាមិនផ្លាស់ប្តូរ ខណៈសំណើកំពុងប្រើវា។

សោការពារតែរូបភាព pointer ដូច្នេះសំណើយឺតមិនកាន់សោផ្លូវពេញរយៈពេលផ្លាស់ប្តូរបណ្តាញរបស់វាទេ។ សំណើដែលកំពុងប្រើរូបភាពមុនបន្តលើ transport នោះ; ការប្តូរមិនចាក់ឡើងវិញ ឬផ្លាស់ការតភ្ជាប់របស់វាទេ។

រក្សា និងដក transport ចាស់ចេញតាមវដ្តជីវិតមានកំណត់របស់កម្មវិធី ដោយអនុញ្ញាតឱ្យការងារកំពុងដំណើរការបញ្ចប់ និងបិទអាងទំនេរនៅពេលសមស្រប។ ការប្តូរទិសអាចបង្ក RoundTrip មួយទៀតបន្ទាប់ពីប្តូរ។ ប្រសិនបើ workflow ទាំងមូលត្រូវការផ្លូវតែមួយ សូមកំណត់ផ្លូវនោះនៅ ព្រំដែន workflow ជំនួសឱ្យការប្តូរ selector ដែលចែករំលែកនេះនៅពាក់កណ្តាលផ្លូវ។

អត្ថបទពាក់ព័ន្ធ