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

A cikin fakitin cibiyar sadarwa na Go da ke akwai, yi amfani da shigo da context, errors, net, time da x/net/proxy. Hujjar nil ba ta zaɓar wani shaidar SOCKS. Don manufa ta jama'a a kan hanyar wakili ta jama'a da aka yarda, jerin wakilan SOCKS5 yana ba da 'yan takara don ƙarshen dialer.

Tabbacin proxy.ContextDialer da aka fitar yana sa aiwatarwa marasa tallafi su kasa a fili. Duba dogaro da aka tura maimakon ambaton nau'in dialer na ciki ko fara goroutine mai toshewa wanda mai kira ba zai iya sarrafawa ba.

Mahallin yana mulkin kafa haɗi. Da zarar an mayar da net.Conn, yi amfani da ƙayyadaddun karatu/rubutu da suka dace ko ƙayyadaddun buƙatu na matsayi mafi girma. Lokacin haɗin dialer na tushe da babban kasafin aikace-aikace iyaka ne daban-daban.

Don haɗakar jigilar HTTP, kiyaye halin TLS da HTTP na yau da kullum. Ruwan SOCKS mai sane da mahalli da aka mayar shine mika wa jigilar, ba amsa ba ko manufar rayuwa ga duk bytes na gaba.

Labarai masu alaƙa