इस गाइड में, 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