func dialViaSOCKS(ctx context.Context, destination string) (net.Conn, error) {
    dialer, err := proxy.SOCKS5(
        "tcp",
        "127.0.0.1:1080",
        nil,
        &net.Dialer{Timeout: 5 * time.Second},
    )
    if err != nil {
        return nil, err
    }
    contextDialer, ok := dialer.(proxy.ContextDialer)
    if !ok {
        return nil, errors.New("SOCKS dialer lacks context support")
    }
    return contextDialer.DialContext(ctx, "tcp", destination)
}

இருக்கும் Go பிணைய தொகுப்பில் context, errors, net, time மற்றும் x/net/proxy இறக்குமதிகளைப் பயன்படுத்துங்கள். nil வாதம் எந்த SOCKS சான்றுகளையும் தேர்ந்தெடுக்காது. அனுமதிக்கப்பட்ட பொது-ப்ராக்ஸி பாதையில் உள்ள பொது இலக்குக்கு SOCKS5 ப்ராக்ஸி பட்டியல் dialer இன் இறுதிப் புள்ளிக்கு வேட்பாளர்களை வழங்குகிறது.

ஏற்றுமதி செய்யப்பட்ட proxy.ContextDialer உறுதிமொழி ஆதரவில்லாத செயலாக்கங்களை வெளிப்படையாகத் தோல்வியடையச் செய்கிறது. உள் dialer வகையைப் பெயரிடுவதற்கோ அல்லது அழைப்பாளர் நிர்வகிக்க முடியாத தடுக்கும் goroutine தொடங்குவதற்கோ பதிலாக, பயன்படுத்தப்பட்ட சார்பைச் சரிபார்க்கவும்.

சூழல் இணைப்பு நிறுவலைக் கட்டுப்படுத்துகிறது. net.Conn திருப்பித் தரப்பட்ட பிறகு, பொருத்தமான வாசிப்பு/எழுத்து அல்லது உயர்-நிலை கோரிக்கை காலக்கெடுவைப் பயன்படுத்துங்கள். அடிப்படை dialer இன் இணைப்பு நேரமுடிவும் ஒரு பயன்பாட்டின் மொத்த பட்ஜெட்டும் வேறுபட்ட வரம்புகள்.

HTTP இடமாற்ற ஒருங்கிணைப்புக்கு அதன் வழக்கமான TLS மற்றும் HTTP நடத்தையைப் பேணுங்கள். திருப்பித் தரப்படும் சூழல்-விழிப்புள்ள SOCKS ஓட்டம் இடமாற்றத்திற்கான ஒப்படைப்பு, பதில் அல்ல மற்றும் பின்னர் வரும் அனைத்து பைட்டுகளுக்கும் ஆயுட்காலக் கொள்கை அல்ல.

தொடர்புடைய கட்டுரைகள்