《Disney +》 迪士尼、Marvel、彼思、星球大戰…  準備迎接PlayStation「2021 Days of Play」社群慶祝活動   GBVS「Legendary Edition」和「Cygames Greatest Hits」決定發售!碧藍幻想2021新情報總結   Hermen Hulst專訪問答:PlayStation Studios的下一步規劃   Let’s Rock!KOF ALLSTAR x GUILTY GEAR Xrd REV 2合作活動   前進H.E.L.M.——一窺隨天選季節來到《天命》的全新特色   【開箱】有線、無線雙對應,華碩小巧電競鍵盤 ASUS「ROG Falchion」!   介紹位於蒙特婁的新獨立工作室「Haven」   營運即將開始!官方播出了「NieR Re[in]carnation」的直播節目#1!並提供事前下載! 

如何將 Go 程式編譯成 WebAssembly

商業

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

  • 註:WebAssembly 在 Firefox 52+ 和 Chrome 57+/latest Opera 是預設支持的

如何將 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

相關網頁

相關教學影片

Tsung

隨機商業新聞

Disney Plus