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

Gudaha xirmo shabakadeed Go oo jira, isticmaal soo-dhoofinada context, errors, net, time iyo x/net/proxy. Doodda nil ma doorato wax aqoonsi SOCKS ah. Ujeeddo guud oo ku taal waddo proxy guud oo la ogolaaday, liiska proxy SOCKS5 wuxuu bixiyaa musharraxiin loogu talagalay barta ugu dambeysa ee dialer-ka.

Caddaynta proxy.ContextDialer ee la dhoofiyay waxay ka dhigtaa hirgelinta aan la taageerin inay si cad u guuldareystaan. Hubi ku-tiirsanaanta la rakibay halkii aad magacaabin lahayd nooc dialer gudaha ah ama aad bilaabi lahayd goroutine xannibaya oo u yeeraha aan maareyn karin.

Macnuhu wuxuu xukumi dhisidda xiriirka. Marka net.Conn la soo celiyo, ku dhaqan geli waqtiyada akhris/qoraal ee ku habboon ama waqtiyada codsiga heerka sare. Waqtiga xiriirka dialer-ka aasaasiga ah iyo miisaaniyadda guud ee codsiga waa xadad kala duwan.

Isku-dhafka gaadiidka HTTP, ilaali dhaqankiisa caadiga ah ee TLS iyo HTTP. Qulqulka SOCKS ee miyirka leh ee la soo celiyo waa wareejinta gaadiidka, ma aha jawaab ama siyaasad nololeed ee dhammaan bytes-ka dambe.

Maqaallo la xiriira