En esta guía, se explica el proceso de configuración de tu entorno de Go y cómo usar el SDK de Outline en ese lenguaje de programación.
Para demostrar una función del SDK,
crearemos una aplicación de ejemplo llamada splitfetch
. Esta recupera una página web, pero, en vez de enviar
la solicitud en un solo paquete de red, usa el SDK de Outline para dividir la
transmisión de TCP inicial en dos paquetes separados, lo que puede ayudar a evitar algunas formas
de intervención de la red.
Podrás ejecutar la aplicación en Linux, macOS y Windows. Para realizar integraciones con apps para dispositivos móviles, consulta Agrega el SDK de Outline a tu app para dispositivos móviles.
Paso 1: Configura Go
Primero, necesitarás el lenguaje de programación Go. Si ya tienes instalada la versión 1.21 (o una posterior), puedes avanzar al siguiente paso.
Para instalarlo, puedes seguir la guía oficial o seguir estos pasos si usas un administrador de paquetes:
Linux
Sigue los pasos que se indican en Go Wiki: Ubuntu.
macOS
brew install go
Windows
winget install --id=GoLang.Go -e
Luego, para verificar que Go se haya instalado correctamente, ejecuta este comando en la terminal:
go version
Paso 2: Crea la aplicación splitfetch
Configuremos el proyecto splitfetch
. Primero, crea el directorio del proyecto y, luego,
inicializa un módulo de Go:
mkdir splitfetch
cd splitfetch
go mod init example/splitfetch
Luego, agrega el SDK de Outline y crea el archivo main.go
.
go get github.com/Jigsaw-Code/outline-sdk@latest
touch main.go
Paso 3: Usa el SDK de Outline en la aplicación
Abre el archivo main.go
en el editor de código que prefieras y pega el siguiente
código en él, que contiene toda la lógica de la aplicación 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))
}
Después de guardar el código, ejecuta el siguiente comando en la terminal para asegurarte
de que el archivo go.mod
se haya actualizado correctamente.
go mod tidy
Paso 4: Ejecuta la aplicación
Ahora que implementaste el código, puedes ejecutar la aplicación splitfetch
.
En el directorio splitfetch
, ejecuta el siguiente comando en la
terminal, pasando una URL como argumento:
go run . https://getoutline.org
Con esta acción, se compila y ejecuta la aplicación, que muestra el contenido HTML de la página web.
Si quieres crear y distribuir un programa independiente que puedas ejecutar
sin go
, usa el comando go build
:
Linux y macOS
go build -o splitfetch .
Windows
go build -o splitfetch.exe .
Cuando se termine de compilar la aplicación, podrás distribuirla y ejecutarla. Por ejemplo:
./splitfetch https://getoutline.org