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 پیلولو پرځای چې غوښتونکی یې مدیریت نه شي کولی، ځای پر ځای شوې تکیه وګورئ.

context د اړیکې جوړولو کنټرول کوي. کله چې net.Conn بیرته راوګرځي، مناسب لوستل/لیکل یا لوړې کچې غوښتنې مهلتونه پلي کړئ. د بنسټیز dialer د اړیکې وخت پای او د اپلیکیشن ټول بودیجه بېلې حدونه دي.

د HTTP لیږد ادغام لپاره د هغې نورمال TLS او HTTP چلند وساتئ. راګرځېدلی context-پوه SOCKS جریان لیږد ته سپارل دی، نه ځواب او نه د ټولو وروستیو بایټونو لپاره د ژوند پالیسي.

اړوندې مقالې