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 ធម្មតារបស់វា។ ស្ទ្រីម SOCKS ដែលដឹងអំពី context ដែលត្រូវបានត្រឡប់មកវិញគឺជាការប្រគល់ទៅការដឹកជញ្ជូន មិនមែនជាការឆ្លើយតប ឬគោលនយោបាយអាយុកាលសម្រាប់បៃបន្ទាប់ទាំងអស់នោះទេ។

អត្ថបទពាក់ព័ន្ធ