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

Olemasolevas Go võrgupaketis kasuta importe context, errors, net, time ja x/net/proxy. Argument nil ei vali ühtegi SOCKS-i mandaati. Avaliku sihtkoha jaoks lubatud avaliku puhverserveri marsruudil pakub SOCKS5 puhverserverite loend kandidaate dialeri lõpp-punktile.

Eksporditud proxy.ContextDialer väide paneb toetamata teostused selgesõnaliselt ebaõnnestuma. Kontrolli juurutatud sõltuvust, selle asemel et nimetada sisemist dialeri tüüpi või käivitada blokeeriv goroutine, mida kutsuja ei saa hallata.

Kontekst juhib ühenduse loomist. Kui net.Conn on tagastatud, rakenda sobivad lugemis-/kirjutamis- või kõrgema tasandi päringutähtajad. Baasdialeri ühenduse ajalõpp ja rakenduse kogueelarve on erinevad piirid.

HTTP-transpordi integreerimisel säilita selle tavaline TLS-i ja HTTP käitumine. Tagastatud kontekstiteadlik SOCKS-voog on üleandmine transpordile, mitte vastus ega kogu hilisema baidivoo eluea poliitika.

Seotud artiklid