In diesem Leitfaden erfahren Sie, wie Sie Ihre Go-Umgebung einrichten und das Outline SDK in Ihrem Go-Code verwenden.
Wir erstellen eine Beispielanwendung namens splitfetch
, die eine Funktion des SDK veranschaulicht. Diese Anwendung ruft eine Webseite ab, aber anstatt die Anfrage in einem einzelnen Netzwerkpaket zu senden, teilt sie den ursprünglichen TCP-Stream mit dem Outline SDK in zwei separate Pakete auf. Dies kann dazu beitragen, einige Formen von Netzwerkeingriffen zu umgehen.
Sie können die Anwendung unter Linux, macOS und Windows ausführen. Informationen zur Einbindung in mobile Apps findest du unter Outline SDK in deiner mobilen App einbinden.
Schritt 1: Go einrichten
Zuerst benötigen Sie die Programmiersprache Go. Wenn Sie Go (Version 1.21 oder höher) bereits installiert haben, können Sie mit dem nächsten Schritt fortfahren.
Für die Installation können Sie der offiziellen Anleitung folgen. Wenn Sie einen Paketmanager verwenden, gehen Sie so vor:
Linux
Folgen Sie der Anleitung im Go Wiki: Ubuntu.
Mac
brew install go
Windows
winget install --id=GoLang.Go -e
Nachdem Go installiert wurde, können Sie die Installation mit dem folgenden Befehl in einem Terminal prüfen:
go version
Schritt 2: splitfetch
-Anwendung erstellen
Richten wir das splitfetch
-Projekt ein. Erstellen Sie zuerst das Projektverzeichnis und initialisieren Sie ein Go-Modul:
mkdir splitfetch
cd splitfetch
go mod init example/splitfetch
Rufen Sie als Nächstes das Outline SDK ab und erstellen Sie die 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 Datei main.go
in Ihrem bevorzugten Code-Editor und fügen Sie den folgenden Code ein. Dieser Code enthält die gesamte Logik für unsere splitfetch
-Anwendung.
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))
}
Führen Sie nach dem Speichern des Codes den folgenden Befehl in Ihrem Terminal aus, um sicherzustellen, dass die Datei go.mod
richtig aktualisiert wurde.
go mod tidy
Schritt 4: Anwendung ausführen
Nachdem Sie den Code eingefügt haben, können Sie die splitfetch
-Anwendung jetzt ausführen.
Führen Sie im Verzeichnis splitfetch
den folgenden Befehl in Ihrem Terminal aus und übergeben Sie eine URL als Argument:
go run . https://getoutline.org
Dadurch wird die Anwendung kompiliert und ausgeführt und der HTML-Inhalt der Webseite wird 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 abgeschlossen ist, können Sie Ihre Anwendung verteilen und ausführen. Beispiel:
./splitfetch https://getoutline.org