Menambahkan Outline SDK ke kode Go

Panduan ini memandu Anda melalui proses penyiapan lingkungan Go dan penggunaan Outline SDK dalam kode Go.

Kita akan mem-build aplikasi contoh yang disebut splitfetch yang menampilkan fitur SDK. Aplikasi ini mengambil halaman web, tetapi alih-alih mengirim permintaan dalam satu paket jaringan, aplikasi ini menggunakan Outline SDK untuk membagi streaming TCP awal menjadi dua paket terpisah. Hal ini dapat membantu mengabaikan beberapa bentuk intervensi jaringan.

Anda dapat menjalankan aplikasi di Linux, Mac, dan Windows. Untuk mengintegrasikan dengan aplikasi seluler, lihat Menambahkan Outline SDK ke aplikasi seluler.

Langkah 1: Siapkan Go

Pertama-tama, Anda memerlukan bahasa pemrograman Go. Jika sudah menginstal Go (versi 1.21 atau yang lebih baru), Anda dapat langsung ke langkah berikutnya.

Untuk penginstalan, Anda dapat mengikuti panduan resmi; atau, jika Anda menggunakan pengelola paket:

Linux

Ikuti langkah-langkah di Go Wiki: Ubuntu.

Mac

brew install go

Windows

winget install --id=GoLang.Go  -e

Setelah Go diinstal, Anda dapat memverifikasi bahwa Go diinstal dengan benar dengan menjalankan perintah berikut di terminal:

go version

Langkah 2: Buat Aplikasi splitfetch

Mari kita siapkan project splitfetch. Pertama, buat direktori project dan lakukan inisialisasi modul Go:

mkdir splitfetch
cd splitfetch
go mod init example/splitfetch

Selanjutnya, ambil Outline SDK dan buat file main.go:

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

Langkah 3: Menggunakan Outline SDK di Aplikasi

Buka file main.go di editor kode favorit Anda, lalu tempelkan kode berikut ke dalamnya. Kode ini berisi semua logika untuk aplikasi 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))
}

Setelah menyimpan kode, jalankan perintah berikut di terminal untuk memastikan file go.mod diperbarui dengan benar.

go mod tidy

Langkah 4: Jalankan Aplikasi

Dengan kode yang sudah ada, Anda kini dapat menjalankan aplikasi splitfetch.

Dari dalam direktori splitfetch, jalankan perintah berikut di terminal Anda, dengan meneruskan URL sebagai argumen:

go run . https://getoutline.org

Tindakan ini akan mengompilasi dan menjalankan aplikasi, yang menampilkan konten HTML halaman web.

Jika Anda ingin membuat dan mendistribusikan program mandiri yang dapat dijalankan tanpa go, gunakan perintah go build:

Linux & Mac

go build -o splitfetch .

Windows

go build -o splitfetch.exe .

Setelah build selesai, Anda dapat mendistribusikan dan menjalankan aplikasi. Contoh:

./splitfetch https://getoutline.org