Questa guida illustra il processo per configurare il tuo ambiente Go e usare Outline SDK nel codice Go.
Creeremo un'applicazione di esempio denominata splitfetch
che illustra una funzionalità dell'SDK. Questa applicazione recupera una pagina web, ma invece di inviare la richiesta in un unico pacchetto di rete utilizza Outline SDK per suddividere il flusso TCP iniziale in due pacchetti separati. Questo può essere utile per aggirare alcuni tipi di interferenze di rete.
Potrai eseguire l'applicazione in Linux, Mac e Windows. Per l'integrazione con le app mobile, vedi Aggiungere Outline SDK alla tua app mobile.
Passaggio 1: configura Go
Per prima cosa avrai bisogno del linguaggio di programmazione Go. Se hai già installato Go (versione 1.21 o successiva), puoi andare al passaggio successivo.
Per l'installazione puoi seguire la guida ufficiale oppure, se usi un gestore di pacchetti:
Linux
Segui la procedura nella pagina del Wiki di Go per Ubuntu.
Mac
brew install go
Windows
winget install --id=GoLang.Go -e
Al termine, puoi verificare che Go sia stato installato correttamente eseguendo il comando seguente in un terminale:
go version
Passaggio 2: crea l'applicazione splitfetch
È il momento di preparare il progetto splitfetch
. Per prima cosa, crea la directory di progetto e inizializza un modulo Go:
mkdir splitfetch
cd splitfetch
go mod init example/splitfetch
Successivamente, aggiungi la dipendenza Outline SDK e crea il tuo file main.go
:
go get github.com/Jigsaw-Code/outline-sdk@latest
touch main.go
Passaggio 3: usa Outline SDK nell'applicazione
Apri il file main.go
nel tuo editor di codice preferito e incolla il codice seguente nel file. Questo codice contiene tutta la logica per l'applicazione 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))
}
Dopo aver salvato il codice, esegui il comando seguente nel terminale per assicurarti che il file go.mod
sia aggiornato correttamente.
go mod tidy
Passaggio 4: esegui l'applicazione
Ora che il codice è pronto, puoi eseguire l'applicazione splitfetch
.
Dalla directory splitfetch
esegui il comando seguente nel tuo terminale, passando un URL come argomento:
go run . https://getoutline.org
L'applicazione viene compilata ed eseguita, visualizzando il contenuto HTML della pagina web.
Se vuoi creare e distribuire un programma autonomo eseguibile senza go
, usa il comando go build
:
Linux e Mac
go build -o splitfetch .
Windows
go build -o splitfetch.exe .
Al termine della creazione, puoi distribuire ed eseguire la tua applicazione. Ad esempio:
./splitfetch https://getoutline.org