আপনার Go কোডে Outline SDK যোগ করুন

এই গাইডটি আপনাকে আপনার Go পরিবেশ সেট আপ করার এবং আপনার Go কোডে আউটলাইন SDK ব্যবহার করার প্রক্রিয়ার মধ্য দিয়ে নিয়ে যায়।

আমরা splitfetch নামে একটি উদাহরণ অ্যাপ্লিকেশন তৈরি করব যা SDK-এর একটি বৈশিষ্ট্য প্রদর্শন করে। এই অ্যাপ্লিকেশনটি একটি ওয়েব পৃষ্ঠা নিয়ে আসে, কিন্তু একটি একক নেটওয়ার্ক প্যাকেটে অনুরোধ পাঠানোর পরিবর্তে, এটি প্রাথমিক TCP স্ট্রীমটিকে দুটি পৃথক প্যাকেটে বিভক্ত করতে আউটলাইন SDK ব্যবহার করে ৷ এটি নেটওয়ার্ক হস্তক্ষেপের কিছু ফর্ম বাইপাস সাহায্য করতে পারে।

আপনি লিনাক্স, ম্যাক এবং উইন্ডোজে অ্যাপ্লিকেশনটি চালাতে সক্ষম হবেন। মোবাইল অ্যাপের সাথে একীভূত করার জন্য, আপনার মোবাইল অ্যাপে আউটলাইন SDK যোগ করুন দেখুন।

ধাপ 1: Go সেট আপ করুন

প্রথমত, আপনার গো প্রোগ্রামিং ল্যাঙ্গুয়েজ প্রয়োজন হবে। আপনি যদি ইতিমধ্যে Go (সংস্করণ 1.21 বা নতুন) ইনস্টল করে থাকেন তবে আপনি পরবর্তী ধাপে যেতে পারেন।

ইনস্টলেশনের জন্য, আপনি অফিসিয়াল গাইড অনুসরণ করতে পারেন; অথবা, আপনি যদি প্যাকেজ ম্যানেজার ব্যবহার করেন:

লিনাক্স

Go Wiki: Ubuntu- এর ধাপগুলি অনুসরণ করুন।

ম্যাক

brew install go

উইন্ডোজ

winget install --id=GoLang.Go  -e

Go ইনস্টল হওয়ার পরে, আপনি একটি টার্মিনালে নিম্নলিখিত কমান্ডটি চালিয়ে এটি সঠিকভাবে ইনস্টল করা হয়েছে কিনা তা যাচাই করতে পারেন:

go version

ধাপ 2: splitfetch অ্যাপ্লিকেশন তৈরি করুন

splitfetch প্রজেক্ট সেট আপ করা যাক। প্রথমে, প্রকল্প ডিরেক্টরি তৈরি করুন এবং একটি গো মডিউল শুরু করুন:

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

ধাপ 3: অ্যাপ্লিকেশনে আউটলাইন 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

ধাপ 4: অ্যাপ্লিকেশন চালান

কোডটি জায়গায় রেখে, আপনি এখন splitfetch অ্যাপ্লিকেশনটি চালাতে পারেন।

splitfetch ডিরেক্টরির মধ্যে থেকে, আপনার টার্মিনালে নিম্নলিখিত কমান্ডটি চালান, একটি যুক্তি হিসাবে একটি URL পাস করুন:

go run . https://getoutline.org

এটি ওয়েবপৃষ্ঠার HTML বিষয়বস্তু প্রদর্শন করে অ্যাপ্লিকেশনটি কম্পাইল করে এবং চালায়।

আপনি যদি একটি স্বতন্ত্র প্রোগ্রাম তৈরি এবং বিতরণ করতে চান যা আপনি go ছাড়াই চালাতে পারেন, go build কমান্ডটি ব্যবহার করুন:

লিনাক্স এবং ম্যাক

go build -o splitfetch .

উইন্ডোজ

go build -o splitfetch.exe .

একবার বিল্ড শেষ হয়ে গেলে, আপনি আপনার অ্যাপ্লিকেশনটি বিতরণ এবং চালাতে পারেন। যেমন:

./splitfetch https://getoutline.org