1. 程式人生 > >用 go 寫 WebAssembly入門

用 go 寫 WebAssembly入門

bass 按鈕 localhost iter .com oos 自定義 其他 handle

Golang WebAssembly 入門

Golang 在1.11版本中引入了 WebAssembly 支持,意味著以後可以用 go編寫可以在瀏覽器中運行的程序,當然這個肯定也是要受瀏覽器沙盒環境約束的.

1. 瀏覽器中運行 Go

1.1 code

package main
func main() {
    println("Hello, WebAssembly!")
}

1.2 編譯

必須是 go1.11才行

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

1.3 運行

單獨的 wasm 文件是無法直接運行的,必須載入瀏覽器中.

mkdir test
cp test.wasm test
cp $GOROOT/misc/wasm/wasm_exec.{html,js} .

1.3.1 一個測試 http 服務器

chrome 是不支持本地文件中運行 wasm 的,所以必須有一個 http 服務器

//http.go
package main

import (
    "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)
    })))
}

1.3.2 http.go

mv http.go test
cd test
go run http.go 

1.4 效果

在瀏覽器中打開http://localhost:8080/wasm_exec.html,點擊 run 按鈕,可以在控制臺看到 Hello, WebAssembly!字符串

2. node中運行 wasm

這個更直接

node wasm_exec.js test.wasm

就可以在控制臺看到Hello, WebAssembly!字符串了.

3. 其他例子

在example中可以看到更多例子

3.1 bouncy

技術分享圖片

3.2 ranbow-mouse

會跟著鼠標畫出彩虹圖案,挺好看的
技術分享圖片

3.3 bumpy

可以畫一些自定義的形狀,形狀不同,落地效果不同.球就會反彈,三角形就不會.不過都摔不壞,不會變形,這點不夠真實
技術分享圖片

用 go 寫 WebAssembly入門