Outline SDK zu Ihrem Go-Code hinzufügen

In diesem Leitfaden werden Sie Schritt für Schritt durch die Einrichtung Ihrer Go-Umgebung geführt und Sie erfahren, wie Sie das Outline SDK in Ihrem Go-Code verwenden.

Wir werden eine Beispiel-App mit der Bezeichnung splitfetch erstellen, die eine Funktion des SDK vorstellt. Diese Anwendung ruft eine Webseite ab, doch anstatt die Anfrage in einem einzigen Netzwerk-Paket zu senden, verwendet sie das Outline SDK, um den initialen TCP-Stream in zwei separate Pakete aufzuteilen. Dies kann dazu beitragen, einige Formen der Netzintervention zu umgehen.

Sie können die App unter Linux, Mac und Windows ausführen. Informationen zur Einbindung in mobile Apps finden Sie hier: Outline SDK zu Ihrer mobilen App hinzufügen.

Schritt 1: Go einrichten

Zuerst brauchen Sie Go (Programmiersprache). Wenn Sie Go bereits installiert haben (Version 1.21 oder höher), können Sie direkt zum nächsten Schritt weitergehen.

Für die Installation können Sie den Schritten im offiziellen Leitfaden folgen oder, wenn Sie einen Paketmanager verwenden:

Linux

Folgen Sie den in Go Wiki: Ubuntu beschriebenen Schritten.

Mac

brew install go

Windows

winget install --id=GoLang.Go  -e

Nach der Installation von Go können Sie überprüfen, ob es korrekt installiert wurde, indem Sie den folgenden Befehl in einem Terminal ausführen:

go version

Schritt 2: splitfetch-App erstellen

Richten Sie das splitfetch-Projekt ein. Dazu müssen Sie zuerst das Projektverzeichnis erstellen und ein Go-Modul initialisieren:

mkdir splitfetch
cd splitfetch
go mod init example/splitfetch

Ziehen Sie dann das Outline SDK hinzu und erstellen Sie Ihre main.go-Datei:

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

Schritt 3: Outline SDK in der Anwendung verwenden

Öffnen Sie die main.go-Datei in Ihrem bevorzugten Code-Editor und fügen Sie den folgenden Code ein. Dieser Code enthält sämtliche Logik für unsere splitfetch-App.

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

Nach dem Speichern des Codes führen Sie den folgenden Befehl in Ihrem Terminal aus, um zu prüfen, ob die go.mod-Datei ordnungsgemäß aktualisiert wurde.

go mod tidy

Schritt 4: Anwendung ausführen

Mit dem erstellten Code können Sie die splitfetch-App nun ausführen.

Führen Sie im splitfetch-Verzeichnis den folgenden Befehl in Ihrem Terminal aus und geben Sie dabei eine URL als Argument an:

go run . https://getoutline.org

Damit wird die Anwendung kompiliert und ausgeführt und der HTML-Inhalt der Webseite angezeigt.

Wenn Sie ein eigenständiges Programm erstellen und verteilen möchten, das ohne go ausgeführt werden kann, verwenden Sie den Befehl go build:

Linux und Mac

go build -o splitfetch .

Windows

go build -o splitfetch.exe .

Sobald der Build erstellt ist, können Sie Ihre App verteilen und ausführen. Beispiel:

./splitfetch https://getoutline.org