這篇文章主要講解了“如何使用golang生成wasm文件并在瀏覽器上執(zhí)行”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“如何使用golang生成wasm文件并在瀏覽器上執(zhí)行”吧!
創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的徐匯網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
webassembly是什么?
webassembly是可以支持在web瀏覽器或者v8等環(huán)境下的二進(jìn)制格式,想具體了解可以查看這個(gè)回答
開(kāi)始
需要先升級(jí)go到1.11版本
編寫需要編譯成wasm文件的go文件
// main.go
package main
func main() {
println("Hello, WebAssembly!")
}
執(zhí)行build命令
GOARCH=wasm GOOS=js go build -o test.wasm main.go
注意這個(gè)是在mac或者linux操作系統(tǒng)下執(zhí)行的命令,在windows下應(yīng)該設(shè)置環(huán)境變量再執(zhí)行編譯命令
$env:GOARCH="wasm";$env:GOOS="js";
go build -o test.wasm main.go
命令執(zhí)行完后,后生成test.wasm文件,這個(gè)就是可以在瀏覽器上運(yùn)行的二進(jìn)制文件
添加其他依賴
復(fù)制$(go env GOROOT)/misc/wasm/下的wasm_exec.html和wasm_exec.js兩個(gè)文件到當(dāng)前目錄
搭建web服務(wù)器
// test.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)
})))
}
運(yùn)行web服務(wù)
go run test.go
測(cè)試
在瀏覽器中打開(kāi)http://localhost:8080/wasm_exec.html,點(diǎn)擊頁(yè)面中的run按鈕,即可看到控制臺(tái)打印Hello, WebAssembly!
這樣我們就已經(jīng)可以使用go編寫一個(gè)可以運(yùn)行在瀏覽器的程序了
如何使用js
使用go的js庫(kù)syscall/js
// main.go
package main
import "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
}
重新編譯后,刷新頁(yè)面,點(diǎn)擊run按鈕,就會(huì)為window對(duì)象掛載一個(gè)sum函數(shù),在控制臺(tái)可以調(diào)用
操作dom
在go中可以獲取window對(duì)象來(lái)達(dá)到操作dom的效果,做一個(gè)計(jì)算器
感謝各位的閱讀,以上就是“如何使用golang生成wasm文件并在瀏覽器上執(zhí)行”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)如何使用golang生成wasm文件并在瀏覽器上執(zhí)行這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!