แนะนำการใช้งาน 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