अपने Go कोड में Outline SDK जोड़ना

इस गाइड में, Go एनवायरमेंट सेट अप करने और अपने Go कोड में Outline SDK टूल का इस्तेमाल करने का तरीका बताया गया है.

हम splitfetch नाम का एक उदाहरण ऐप्लिकेशन बनाएंगे, जिसमें SDK टूल की सुविधा दिखाई गई होगी. यह ऐप्लिकेशन एक वेब पेज को फ़ेच करता है. हालांकि, अनुरोध को एक नेटवर्क पैकेट में भेजने के बजाय, यह शुरुआती टीसीपी स्ट्रीम को दो अलग-अलग पैकेट में बांटने के लिए, Outline SDK टूल का इस्तेमाल करता है. इससे नेटवर्क से जुड़ी कुछ समस्याओं को हल करने में मदद मिल सकती है.

इस ऐप्लिकेशन को Linux, Mac, और Windows पर चलाया जा सकेगा. मोबाइल ऐप्लिकेशन के साथ इंटिग्रेट करने के लिए, अपने मोबाइल ऐप्लिकेशन में Outline SDK जोड़ना लेख पढ़ें.

पहला चरण: Go को सेट अप करना

सबसे पहले, आपको Go प्रोग्रामिंग भाषा की ज़रूरत होगी. अगर आपने पहले से ही Go (1.21 या इसके बाद का वर्शन) इंस्टॉल किया हुआ है, तो सीधे अगले चरण पर जाएं.

इंस्टॉल करने के लिए, आधिकारिक गाइड का पालन करें. इसके अलावा, अगर पैकेज मैनेजर का इस्तेमाल किया जा रहा है, तो:

Linux

इसके लिए, Go Wiki: Ubuntu में दिया गया तरीका अपनाएं.

Mac

brew install go

Windows

winget install --id=GoLang.Go  -e

Go इंस्टॉल होने के बाद, टर्मिनल में यह कमांड चलाकर पुष्टि की जा सकती है कि यह सही तरीके से इंस्टॉल हुआ है या नहीं:

go version

दूसरा चरण: splitfetch ऐप्लिकेशन बनाना

आइए, splitfetch प्रोजेक्ट सेट अप करते हैं. सबसे पहले, प्रोजेक्ट डायरेक्ट्री बनाएं और Go मॉड्यूल को शुरू करें:

mkdir splitfetch
cd splitfetch
go mod init example/splitfetch

इसके बाद, Outline SDK टूल इंपोर्ट करें और अपनी main.go फ़ाइल बनाएं:

go get github.com/Jigsaw-Code/outline-sdk@latest
touch main.go

तीसरा चरण: ऐप्लिकेशन में Outline SDK टूल का इस्तेमाल करना

अपने पसंदीदा कोड एडिटर में main.go फ़ाइल खोलें और इसमें यह कोड चिपकाएं. इस कोड में, हमारे splitfetch ऐप्लिकेशन का पूरा लॉजिक शामिल है.

package main

import (
    "context"
    "fmt"
    "io"
    "log"
    "net"
    "net/http"
    "os"

    "github.com/Jigsaw-Code/outline-sdk/transport"
    "github.com/Jigsaw-Code/outline-sdk/transport/split"
)

// The number of bytes to send in the first packet.
const splitPacketSize = 3

func main() {
    // 1. Get the URL from the command-line arguments.
    if len(os.Args) < 2 {
        log.Fatalf("Usage: %s <URL>", os.Args[0])
    }
    url := os.Args[1]

    // 2. Create a split dialer from the Outline SDK.
    // This dialer wraps a standard TCP dialer to add the splitting behavior.
    dialer, err := split.NewStreamDialer(&transport.TCPDialer{}, split.NewFixedSplitIterator(splitPacketSize))
    if err != nil {
        log.Fatalf("Failed to create split dialer: %v", err)
    }

    // 3. Configure an HTTP client to use our custom split dialer for TCP connections.
    httpClient := &http.Client{
        Transport: &http.Transport{
            DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
                return dialer.DialStream(ctx, addr)
            },
        },
    }

    // 4. Use the custom client to make the HTTP GET request.
    resp, err := httpClient.Get(url)
    if err != nil {
        log.Fatalf("HTTP request failed: %v", err)
    }
    defer resp.Body.Close()

    body, err := io.ReadAll(resp.Body)
    if err != nil {
        log.Fatalf("Failed to read response body: %v", err)
    }
    fmt.Println(string(body))
}

कोड सेव करने के बाद, अपने टर्मिनल में यह कमांड चलाएं, ताकि यह पक्का किया जा सके कि go.mod फ़ाइल सही तरीके से अपडेट हुई है.

go mod tidy

चौथा चरण: ऐप्लिकेशन चलाना

कोड लागू होने के बाद, अब splitfetch ऐप्लिकेशन चलाया जा सकता है.

splitfetch डायरेक्ट्री में जाकर, अपने टर्मिनल में यह कमांड चलाएं. इसके लिए, आर्ग्युमेंट के तौर पर यूआरएल डालें:

go run . https://getoutline.org

यह ऐप्लिकेशन को कंपाइल और चलाता है. साथ ही, वेबपेज का एचटीएमएल कॉन्टेंट दिखाता है.

अगर आपको ऐसा स्टैंडअलोन प्रोग्राम बनाना और डिस्ट्रिब्यूट करना है जिसे go के बिना चलाया जा सके, तो go build कमांड का इस्तेमाल करें:

Linux और Mac

go build -o splitfetch .

Windows

go build -o splitfetch.exe .

बिल्ड पूरा होने के बाद, अपने ऐप्लिकेशन को डिस्ट्रिब्यूट और चलाया जा सकता है. उदाहरण के लिए:

./splitfetch https://getoutline.org