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)
}

Unutar postojećeg Go mrežnog paketa koristite uvoze context, errors, net, time i x/net/proxy. Argument nil ne bira nikakve SOCKS akreditive. Za javno odredište na dozvoljenoj ruti javnog proxyja lista SOCKS5 proxyja nudi kandidate za krajnju tačku dialera.

Izvezena tvrdnja proxy.ContextDialer čini da nepodržane implementacije eksplicitno ne uspeju. Proverite raspoređenu zavisnost umesto da imenujete interni tip dialera ili pokrećete blokirajuću goroutine kojom pozivalac ne može da upravlja.

Kontekst upravlja uspostavljanjem veze. Kada se net.Conn vrati, primenite odgovarajuće rokove za čitanje/pisanje ili rokove zahteva višeg nivoa. Vremensko ograničenje veze osnovnog dialera i ukupni budžet aplikacije su različita ograničenja.

Za integraciju HTTP transporta zadržite njegovo normalno TLS i HTTP ponašanje. Vraćeni SOCKS tok svestan konteksta je primopredaja transportu, a ne odgovor niti politika životnog veka za sve kasnije bajtove.

Povezani članci