Outline SDK را به کد Go خود اضافه کنید

این راهنما شما را در فرآیند راه‌اندازی محیط Go و استفاده از Outline SDK در کد Go خود راهنمایی می‌کند.

ما یک برنامه کاربردی به نام splitfetch خواهیم ساخت که یکی از ویژگی های SDK را به نمایش می گذارد. این برنامه یک صفحه وب را واکشی می کند، اما به جای ارسال درخواست در یک بسته شبکه، از Outline SDK برای تقسیم جریان اولیه TCP به دو بسته جداگانه استفاده می کند . این ممکن است به دور زدن برخی از اشکال مداخله شبکه کمک کند.

شما قادر خواهید بود برنامه را روی لینوکس، مک و ویندوز اجرا کنید. برای ادغام با برنامه های تلفن همراه، افزودن Outline SDK به برنامه تلفن همراه خود را بررسی کنید.

مرحله 1: راه اندازی Go

ابتدا به زبان برنامه نویسی Go نیاز دارید. اگر قبلاً Go (نسخه 1.21 یا جدیدتر) را نصب کرده اید، می توانید به مرحله بعدی بروید.

برای نصب، می توانید راهنمای رسمی را دنبال کنید. یا اگر از پکیج منیجر استفاده می کنید:

لینوکس

مراحل را در Go Wiki دنبال کنید: اوبونتو .

مک

brew install go

ویندوز

winget install --id=GoLang.Go  -e

پس از نصب Go، می توانید با اجرای دستور زیر در ترمینال تأیید کنید که به درستی نصب شده است:

go version

مرحله 2: برنامه 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

مرحله 3: از 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

مرحله 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