美國Cyberpunk 2077退款開始 PlayStaton Store停止發售   背肌臘腸狗將參戰動物之鬪最新作《Fight of Animals: Arena》!   凱特·畢夏普預計在12月8日加入《漫威復仇者聯盟》   日本遊戲大賞 2020「集合啦 動物森友會 開發團隊」獲得日本經濟產業大臣獎!   「哆啦A夢 牧場物語」在PlayStation 4登場!7月30日(四)公開發售   秋葉原開設的集合Cafe和電競於一身的ROCKET e-cafe   「槍彈辯駁」系列10週年!宣布登上手機平台和與「IdentityV 第五人格」合作!   尊榮劍術:信守《Ghost of Tsushima》的「致命約定」與戰鬥平衡 

如何將 Go 程式編譯成 WebAssembly

Go 1.11 之後的版本,支援可以直接將 Go 寫的內容編譯成 WebAssembly (wasm),然後搭配已經寫好的 wasm_exec.html 和 wasm_exec.js 就可以直接在頁面上執行。

如何將 Go 程式編譯成 WebAssembly

Go 1.11 開始支援編譯成 WebAssembly,詳見:WebAssembly · golang/go Wiki · GitHub

使用 GVM 安裝 Go1.11

  1. gvm install go1.11
  2. gvm use go1.11

Go1.11 編譯出 wasm 步驟

  1. vim main.go # 下述範例都取自上述官方範例
    package main
    
    func main() {
        println("Hello, WebAssembly!")
    }
  2. vim server.go
    package mainimport (
     "flag"
     "log"
     "net/http"
     "strings"
    )
    
    var (
     listen = flag.String("listen", ":8080", "listen address") dir = flag.String("dir", ".", "directory to serve")
    )
    
    func main() {
     flag.Parse()
     log.Printf("listening on %q...", *listen)
     log.Fatal(http.ListenAndServe(*listen, http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) {
      if strings.HasSuffix(req.URL.Path, ".wasm") {
       resp.Header().Set("content-type", "application/wasm")
      }
    
      http.FileServer(http.Dir(*dir)).ServeHTTP(resp, req)
     })))
    }
  3. GOARCH=wasm GOOS=js go build -o test.wasm main.go
  4. cp $(go env GOROOT)/misc/wasm/wasm_exec.{html,js} .
  5. 註:$(go env GOROOT) = ~/.gvm/gos/go1.11/misc/wasm/
  6. go run server.go
    http://example.com:8080/wasm_exec.html
  7. 點 RUN 打開 Console 就會出現 Hello, WebAssembly!
  8. Go 如何與 JavaScript 溝通(js.Value.*),可參考 syscall/js 函式庫,此篇有更多範例說明:Go 1.11: WebAssembly for the gophers

相關網頁

相關教學影片

相關文章