แนะนำการใช้งาน WebAssembly (WASM) กับภาษา Go สำหรับสร้าง Web Application ที่มีประสิทธิภาพสูง พร้อมตัวอย่างและขั้นตอนใช้งานจริง
WebAssembly คืออะไร?
WebAssembly หรือ WASM คือมาตรฐานใหม่ที่ช่วยให้เราสามารถรันโค้ดภาษาอื่น (เช่น Go, Rust, C++) บน Browser ได้ด้วย performance ระดับ native โดยไม่ต้องเขียนด้วย JavaScript ล้วนอีกต่อไป
ข้อดี:
- รันเร็วกว่า JavaScript
- ปลอดภัย (รันใน sandbox)
- ทำงานร่วมกับ JavaScript ได้

Golang รองรับ WebAssembly ไหม?
ใช่! ตั้งแต่ Go 1.11 เป็นต้นมา เราสามารถ build โค้ด Go ให้เป็น WebAssembly ได้โดยใช้ target: GOOS=js GOARCH=wasm
เริ่มต้นใช้งาน WASM กับ Go
1. ติดตั้ง Go รุ่นล่าสุด
ตรวจสอบให้แน่ใจว่าใช้ Go เวอร์ชัน 1.18 ขึ้นไป
go version
2. สร้างไฟล์ main.go
package main import ( "syscall/js" ) func main() { alert := js.Global().Get("alert") alert.Invoke("Hello from WASM + Go!") }
3. Build ให้เป็น .wasm
GOOS=js GOARCH=wasm go build -o main.wasm
4. เพิ่มไฟล์ runtime wasm_exec.js
cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
สร้าง HTML เพื่อรัน WebAssembly
<!DOCTYPE html> <html> <head><meta charset="utf-8"></head> <body> <h1>Golang + WASM Demo</h1> <script src="wasm_exec.js"></script> <script> const go = new Go(); WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).then((result) => { go.run(result.instance); }); </script> </body> </html>
Run ด้วย Local HTTP Server
python3 -m http.server 8080
แล้วเปิด http://localhost:8080 เพื่อดูผลลัพธ์
สื่อสารระหว่าง Go ↔ JavaScript
Go เรียก JS
js.Global().Call("alert", "จาก Go สู่ JS")
JS เรียก Go Function
func add(this js.Value, args []js.Value) interface{} { sum := args[0].Int() + args[1].Int() return js.ValueOf(sum) } func main() { js.Global().Set("addFromGo", js.FuncOf(add)) select {} // keep alive }
เรียกจาก JS:
let result = addFromGo(1, 2);
ข้อจำกัดของ WASM + Go
- ขนาด binary ใหญ่ (~2MB)
- ยังไม่รองรับ threading หรือ syscall แบบเต็มรูปแบบ
- ช้ากว่า native บางส่วน (แต่ยังเร็วกว่า JS)
Use Case ที่เหมาะกับ Go + WASM
- แปลงไฟล์ / ประมวลผลใน browser
- WebAssembly module แทน backend บางส่วน
- ซ้อน logic ที่เขียนด้วย Go แล้วใช้ใน frontend

ตัวอย่างโปรเจกต์ Open Source ที่ใช้ Go + WASM
- Burnit: WASM-based image renderer
- Go WebAssembly Examples
- Wombat: Go Playground in WASM
สรุป
WebAssembly ช่วยให้เราสามารถใช้ความสามารถของภาษา Go บน browser ได้ โดยไม่ต้องพึ่ง JavaScript เต็มรูปแบบ เป็นทางเลือกที่น่าสนใจสำหรับ frontend-heavy application ที่ต้องการ performance หรือ security ที่สูงขึ้น
แม้จะยังมีข้อจำกัดบางอย่าง แต่การใช้งาน WASM กับ Golang ก็เติบโตต่อเนื่อง และเหมาะกับหลาย use case ที่ต้องการ native performance บนเว็บ
คำค้น (SEO Keywords)
- Go WebAssembly
- WASM Go ภาษาไทย
- WebAssembly กับ Golang
- Run Go บน Browser
- Build .wasm จาก Go
- WASM integration JavaScript Go
- HTML + Go WebAssembly