ภาษา Go 1.11 ออกตัวเต็ม ๆ มาแล้ว
หนึ่งใน feature ที่เพิ่มเข้ามานั่นคือ การทำงานร่วมกับ WebAssembly
แต่ยังเป็น experiment feature นะ
จากความสามารถนี้
ทำให้เราสามารถพัฒนาระบบด้วยภาษา Go
ทำการ compile ไปเป็น WebAssembly
จากนั้นทำการเรียกใช้งานผ่าน JavaScript ซึ่งสามารถทำงานผ่าน browser

การใช้งานเบื้องต้นสามารถดูได้จากเอกสาร
ซึ่งทำการ compile ได้ดังนี้

$GOARCH=wasm GOOS=js go build -o test.wasm main.go

สังเกตุว่า ทำการกำหนด

  • GOARCH=wasm
  • GOOS=js

ผลลัพธ์ที่ได้คือ ไฟล์ main.wasm จากนั้นก็นำไปใช้งานดังนี้

เมื่อ Hello World ผ่านไป มาดูตัวอย่างที่ดูยากขึ้นมานิดนึง
นั่นคือทำการบวกตัวเลข 2 ตัวกันดีกว่า (มันยากตรงไหน ?)

ขั้นตอนที่ 1 ทำการสร้างส่วนของ HTML ดังนี้

แสดงผลดังนี้

ขั้นตอนที่ 2 เขียนภาษา Go กัน

สิ่งที่ต้องการคือ

  • อ่านค่าของ operand 1 และ operand 2 จาก HTML
  • ทำการดักจับ event เมื่อกดปุ่ม Add แล้วนำค่าจาก operand 1 และ operand 2 มาบวกกัน

โดยภาษา Go ได้เตรียม package syscall/js มาให้
ดังนั้นมาลองเขียนกันหน่อย

คำอธิบาย
ทำการเรียกใช้งาน method จาก JavaScript ตรง ๆ ไปเลย
ทั้ง getElementById() และ กำหนดค่าลง property เช่น innerText เป็นต้น

อย่าลืมเปิด channel ทิ้งไว้นะครับ
ไม่งั้นก็มี error แบบนี้ใน Chrome Dev Tool :: Console

ทำการ compile ได้เลย

$GOARCH=wasm GOOS=js go build -o add.wasm add.go

ขั้นตอนที่ 3 เรียกใช้งานไฟล์ add.wasm กัน

เพียงเท่านี้ก็ทำการบวกเลขได้แล้ว
ลองไปใช้งานเล่น ๆ ได้ที่ Github Page :: Demo
โดยที่ตัวอย่าง source code อยู่ที่ Github :: Demo WebAssembly with Go

สุดท้ายแล้ว มี use case ไหนที่ต้องการทำแบบนี้บ้างนะ ?
ผมไม่มีประสบการณ์ และ คิดไม่ออกเลย

ขอให้สนุกกับการ coding ครับ