溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用golang生成wasm文件并在瀏覽器上執行

發布時間:2022-03-04 14:01:41 來源:億速云 閱讀:1410 作者:iii 欄目:web開發

這篇文章主要講解了“如何使用golang生成wasm文件并在瀏覽器上執行”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何使用golang生成wasm文件并在瀏覽器上執行”吧!

webassembly是什么?

webassembly是可以支持在web瀏覽器或者v8等環境下的二進制格式,想具體了解可以查看這個回答

開始

需要先升級go到1.11版本

編寫需要編譯成wasm文件的go文件

// main.go

package main

func 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兩個文件到當前目錄

搭建web服務器

// 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)

})))

}

運行web服務

go run test.go

測試

在瀏覽器中打開http://localhost:8080/wasm_exec.html,點擊頁面中的run按鈕,即可看到控制臺打印Hello, WebAssembly!

這樣我們就已經可以使用go編寫一個可以運行在瀏覽器的程序了

如何使用js

使用go的js庫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

}

重新編譯后,刷新頁面,點擊run按鈕,就會為window對象掛載一個sum函數,在控制臺可以調用

操作dom

在go中可以獲取window對象來達到操作dom的效果,做一個計算器

感謝各位的閱讀,以上就是“如何使用golang生成wasm文件并在瀏覽器上執行”的內容了,經過本文的學習后,相信大家對如何使用golang生成wasm文件并在瀏覽器上執行這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女