Outline SDK'yı Go kodunuza ekleme

Bu kılavuzda, Go ortamınızı ayarlama ve Go kodunuzda Outline SDK'yı kullanma süreçleri adım adım açıklanmaktadır.

SDK'nın bir özelliğini gösteren splitfetch adında bir örnek uygulama oluşturacağız. Bu uygulama bir web sayfasını getirir ancak talebi tek bir ağ paketinde göndermek yerine Outline SDK'yı kullanarak ilk TCP akışını iki ayrı pakete böler. Bu özellik, bazı ağ müdahalesi türlerinin atlatılmasını sağlayabilir.

Uygulamayı Linux, Mac ve Windows üzerinde çalıştırabilirsiniz. Mobil uygulamalarla entegrasyon için Outline SDK'yı mobil uygulamanıza ekleme başlıklı bölüme bakın.

1. adım: Go'yu ayarlayın

Öncelikle Go programlama dili gerekir. Go (sürüm 1.21 veya sonraki bir sürümü) zaten yüklüyse sonraki adıma geçebilirsiniz.

Yükleme için resmi kılavuzdaki yönergeleri izleyebilirsiniz. Paket yöneticisi kullanıyorsanız:

Linux

Go Wiki: Ubuntu sayfasındaki adımları izleyin.

Mac

brew install go

Windows

winget install --id=GoLang.Go  -e

Go yüklendikten sonra, aşağıdaki komutu terminalde çalıştırarak yüklemenin doğru bir şekilde yapılıp yapılmadığını doğrulayabilirsiniz:

go version

2. adım: splitfetch uygulamasını oluşturun

Şimdi splitfetch projesini ayarlayalım. Öncelikle proje dizinini oluşturun ve bir Go modülü başlatın:

mkdir splitfetch
cd splitfetch
go mod init example/splitfetch

Ardından, Outline SDK'yı ekleyin ve main.go dosyanızı oluşturun:

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

3. adım: Uygulamada Outline SDK'yı kullanın

main.go dosyasını en sevdiğiniz kod düzenleyicide açın ve aşağıdaki kodu dosyaya yapıştırın. Bu kodda, splitfetch uygulamanıza dair mantık yer alır.

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))
}

Kodu kaydettikten sonra, aşağıdaki komutu terminalde çalıştırarak go.mod dosyasının doğru şekilde güncellendiğinden emin olun.

go mod tidy

4. adım: Uygulamayı çalıştırın

Kod hazırlandığına göre artık splitfetch uygulamasını çalıştırabilirsiniz.

splitfetch dizini içinden, aşağıdaki komutu terminalde çalıştırın. Bu işlemde bağımsız değişken olarak bir URL kullanın:

go run . https://getoutline.org

Böylece uygulama derlenip çalıştırılır ve web sayfasının HTML içeriği görüntülenir.

go olmadan çalıştırabileceğiniz bağımsız bir program oluşturup dağıtmak istiyorsanız go build komutunu kullanın:

Linux ve Mac

go build -o splitfetch .

Windows

go build -o splitfetch.exe .

Derleme işlemi tamamlandıktan sonra, uygulamanızı dağıtıp çalıştırabilirsiniz. Örneğin:

./splitfetch https://getoutline.org