golang 获取当天0点时间_golang使用webAssembly的方式
WebAssembly (WASM) 是一種新的編碼方式,可以在現代的網絡瀏覽器中運行- 它是一種低級的類匯編語言,具有緊湊的二進制格式,可以接近原生的性能. 可以將C/C++/Rust/GO代碼編譯成.wasm文件, 然后運行在web上面.
本文僅介紹Golang與WASM使用的相關基礎知識.
環境
需要golang版本高于go1.11, 本文golang版本:
$ go version > go version go1.11.1 darwin/amd64js中調用golang函數案例
本案例基于goland IDE編寫, 為了獲取syscall/js庫的自動提示, 需要對IDE進行如下設置:
設置好之后, 進行編輯go文件: main.go
package mainimport ("fmt""syscall/js" )func foo( args []js.Value) {fmt.Println("hellow wasm")fmt.Println(args) }func main() {// 將golang中foo函數注入到window.foo中js.Global().Set("foo", js.NewCallback(foo))// 將100注入到 window.value中js.Global().Set("value", 100)select {} }將此main.go文件, 編譯成wasm文件:
GOARCH=wasm GOOS=js go build -o test.wasm main.go接下來需要開啟一個簡單的web服務器并將上一步的wasm文件復制到案例目錄中:
server.go:
package mainimport "net/http"func main() {http.ListenAndServe(":8080", http.FileServer(http.Dir("./test1"))) // 此為案例文件夾目錄 }將golang源碼中的wasm_exec.js復制到本案例中:
cp $GOROOT/misc/wasm/wasm_exec.js .index.html:
<html> <head><meta charset="utf-8"><script src="wasm_exec.js"></script><script>const go = new Go();WebAssembly.instantiateStreaming(fetch("test.wasm"), go.importObject).then((result) => {go.run(result.instance);});</script> </head> <body></body> </html>整體案例文件:
$ tree test1 test1 ├── index.html ├── server.go ├── test.wasm └── wasm_exec.js運行 go run server.go即可啟動服務
瀏覽器中訪問 http://127.0.0.1:8080/index.html, 右鍵->檢查->console
即可對golang中的函數 以及 屬性進行訪問.
GO獲取DOM元素, 操作標簽屬性
同樣的方式, main.go中:
package mainimport ("syscall/js" )func setDivRedColor(args []js.Value) {// 獲取DOM元素, 進行設置屬性, call方法為調用js方法js.Global().Get("document").Call("getElementById", "div").Set("style", "width: 300px; height: 300px; background-color: red")// 注意, 此處設置style的時候, 是會覆蓋掉html中的style設置 }func main() {js.Global().Set("setDivRedColor", js.NewCallback(setDivRedColor))select {} }進行編譯, 得到wasm文件, 復制到案例項目中
項目中server.go不變, index.html改為:
<html> <head><meta charset="utf-8"><script src="wasm_exec.js"></script><script>const go = new Go();WebAssembly.instantiateStreaming(fetch("test.wasm"), go.importObject).then((result) => {go.run(result.instance);});</script> </head> <body><div style="width: 300px; height: 300px; background-color: yellow" id="div"></div> </body> </html>啟動服務, 瀏覽器訪問http://127.0.0.1:8080/index.html
當console中調用對應的golang函數:
總結
以上就是Go中使用WASM的基本方式, golang對于WASM支持也在不斷的加強. 此案例編譯生成的wasm文件為1.4M, 后續也許會優化縮小.
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的golang 获取当天0点时间_golang使用webAssembly的方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 常用头文件,(常用头文件详解
- 下一篇: java 控制台五子棋_java控制台五