本文共 1864 字,大约阅读时间需要 6 分钟。
WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable target for compilation of high-level languages like C/C++/Rust, enabling deployment on the web for client and server applications.
是可以支持在web浏览器或者v8等环境下的二进制格式,想具体了解可以查看
本文只介绍如何使用golang生成wasm文件,并在浏览器上执行。需要先升级go到1.11版本
// main.gopackage mainfunc main() { println("Hello, WebAssembly!")}
build
命令GOARCH=wasm GOOS=js go build -o test.wasm main.go
注意这个是在mac或者linux操作系统下执行的命令,在windows下应该设置环境变量再执行编译命令
$env:GOARCH="wasm";$env:GOOS="js";go build -o test.wasm main.go
命令执行完后,后生成test.wasm
文件,这个就是可以在浏览器上运行的二进制文件
复制$(go env GOROOT)/misc/wasm/
下的wasm_exec.html
和wasm_exec.js
两个文件到当前目录
// test.gopackage 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) })))}
运行web服务
go run test.go
在浏览器中打开http://localhost:8080/wasm_exec.html
,点击页面中的run按钮,即可看到控制台打印Hello, WebAssembly!
这样我们就已经可以使用go编写一个可以运行在浏览器的程序了
使用go的js库syscall/js
// main.gopackage mainimport "syscall/js"func sum(args []js.Value) { var sum int for _, val := range args { sum += val.Int() } println(sum)}func registerCallbacks() { js.Global().Set("sum", js.NewCallback(sum))}func main() { c := make(chan struct{}, 0) println("Hello, WebAssembly!") registerCallbacks() <-c}
重新编译后,刷新页面,点击run
按钮,就会为window
对象挂载一个sum
函数,在控制台可以调用
在go中可以获取window对象来达到操作dom的效果,做一个计算器
转载地址:http://ojkei.baihongyu.com/