Este guia orienta todo o processo de configuração do ambiente Go e uso do SDK Outline no seu código Go.
Vamos criar um aplicativo de exemplo, chamado splitfetch
, que demonstra o
recurso do SDK. Esse aplicativo busca uma página da Web, mas em vez de enviar
a solicitação em um único pacote de rede, ele usa o SDK Outline para dividir o
stream inicial do TCP em dois pacotes separados. Isso pode ajudar a ignorar algumas formas
de intervenção na rede.
O aplicativo poderá ser executado no Linux, Mac e Windows. Para integração com dispositivos móveis, confira Adicionar o SDK Outline ao seu app para dispositivos móveis.
Etapa 1: configurar o Go
Primeiro você vai precisar da Linguagem de programação Go (em inglês). Se você já tem o Go (versão 1.21 ou mais recente) instalado, pule para a próxima etapa.
Para a instalação, você pode seguir o guia oficial (em inglês); ou, se você usa o gerenciador de pacotes:
Linux
Siga as etapas em Wiki Go: Ubuntu (em inglês).
Mac
brew install go
Windows
winget install --id=GoLang.Go -e
Quando o Go estiver instalado, você poderá confirmar que a instalação foi bem-sucedida executando o comando a seguir em um terminal:
go version
Etapa 2: criar o aplicativo splitfetch
Vamos configurar o projeto splitfetch
. Primeiro crie o diretório do projeto e
inicialize um módulo Go:
mkdir splitfetch
cd splitfetch
go mod init example/splitfetch
A seguir, adicione as dependências do SDK Outline e crie o arquivo main.go
:
go get github.com/Jigsaw-Code/outline-sdk@latest
touch main.go
Etapa 3: usar o SDK Outline no aplicativo
Abra o arquivo main.go
no seu editor de código favorito e cole
o código a seguir. Esse código contém toda a lógica do nosso aplicativo 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))
}
Depois de salvar o código, execute o comando a seguir no seu terminal para se certificar que
o arquivo go.mod
seja atualizado corretamente.
go mod tidy
Etapa 4: executar o aplicativo
Com o código pronto, você pode executar o aplicativo splitfetch
.
De dentro do diretório splitfetch
, execute o comando a seguir no seu
terminal, passando um URL como um argumento:
go run . https://getoutline.org
Isso compila e executa o aplicativo, exibindo o conteúdo HTML da página da web.
Se quiser criar e distribuir um programa independente que possa ser executado
sem go
, use o comando go build
:
Linux e Mac
go build -o splitfetch .
Windows
go build -o splitfetch.exe .
Quando o build estiver pronto, você poderá distribuir e executar seu aplicativo. Por exemplo:
./splitfetch https://getoutline.org