คู่มือนี้จะแนะนำขั้นตอนการสร้างสภาพแวดล้อม Go และการใช้ Outline SDK ในโค้ด Go
เราจะสร้างแอปพลิเคชันตัวอย่างชื่อ splitfetch
ที่แสดงฟีเจอร์ของ SDK แอปพลิเคชันนี้จะดึงข้อมูลหน้าเว็บ แต่แทนที่จะส่งคำขอในแพ็กเก็ตเครือข่ายเดียว แอปพลิเคชันจะใช้ Outline SDK เพื่อแยกสตรีม TCP เริ่มต้นออกเป็น 2 แพ็กเก็ตแยกกัน ซึ่งอาจช่วยหลีกเลี่ยงการแทรกแซงเครือข่ายบางรูปแบบ
คุณจะเรียกใช้แอปพลิเคชันใน Linux, Mac และ Windows ได้ สําหรับการผสานรวมกับแอปบนอุปกรณ์เคลื่อนที่ โปรดดูหัวข้อเพิ่ม Outline SDK ลงในแอปบนอุปกรณ์เคลื่อนที่
ขั้นตอนที่ 1: ตั้งค่า Go
ก่อนอื่น คุณจะต้องมีภาษาโปรแกรม Go หากติดตั้ง Go (เวอร์ชัน 1.21 ขึ้นไป) ไว้แล้ว ให้ข้ามไปที่ขั้นตอนถัดไป
สำหรับการติดตั้ง ให้ทำตามคำแนะนำอย่างเป็นทางการ หรือหากใช้เครื่องมือจัดการแพ็กเกจ ให้ทำดังนี้
หลังจากติดตั้ง Go แล้ว คุณสามารถยืนยันได้ว่าติดตั้งอย่างถูกต้องแล้วโดยเรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล
go version
ขั้นตอนที่ 2: สร้างแอปพลิเคชัน splitfetch
มาตั้งค่าโปรเจ็กต์ splitfetch
กัน ก่อนอื่น ให้สร้างไดเรกทอรีโปรเจ็กต์และเริ่มต้นโมดูล Go โดยทำดังนี้
mkdir splitfetch
cd splitfetch
go mod init example/splitfetch
ถัดไป ให้ดึง Outline SDK เข้ามาและสร้างไฟล์ main.go
โดยทำดังนี้
go get github.com/Jigsaw-Code/outline-sdk@latest
touch main.go
ขั้นตอนที่ 3: ใช้ Outline SDK ในแอปพลิเคชัน
เปิดไฟล์ main.go
ในตัวแก้ไขโค้ดที่ต้องการ แล้ววางโค้ดต่อไปนี้ลงไป โค้ดนี้มีตรรกะทั้งหมดสําหรับแอปพลิเคชัน 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))
}
หลังจากบันทึกโค้ดแล้ว ให้เรียกใช้คําสั่งต่อไปนี้ในเทอร์มินัลเพื่อให้แน่ใจว่าไฟล์ go.mod
ได้รับการอัปเดตอย่างถูกต้อง
go mod tidy
ขั้นตอนที่ 4: เรียกใช้แอปพลิเคชัน
เมื่อติดตั้งโค้ดแล้ว คุณจะเรียกใช้แอปพลิเคชัน splitfetch
ได้
จากภายในไดเรกทอรี splitfetch
ให้เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล โดยส่ง URL เป็นอาร์กิวเมนต์
go run . https://getoutline.org
ซึ่งจะคอมไพล์และเรียกใช้แอปพลิเคชันเพื่อแสดงเนื้อหา HTML ของหน้าเว็บ
หากต้องการสร้างและเผยแพร่โปรแกรมแบบสแตนด์อโลนที่คุณสามารถเรียกใช้โดยไม่ต้องใช้ go
ให้ใช้คำสั่ง go build
ดังนี้
Linux และ Mac
go build -o splitfetch .
Windows
go build -o splitfetch.exe .
เมื่อบิลด์เสร็จแล้ว คุณจะเผยแพร่และเรียกใช้แอปพลิเคชันได้ เช่น
./splitfetch https://getoutline.org