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