网友回复
webassembly是什么?
webassembly是可以支持在web浏览器或者v8等环境下运行的二进制格式文件。
本文只介绍如何使用golang生成wasm文件,并在浏览器上执行。开始
需要先升级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两个文件到http的服务根目录 在浏览器中打开http://localhost:8080/wasm_exec.html,点击页面中的run按钮,即可看到控制台打印Hello, WebAssembly! 这样我们就已经可以使用go编写一个可以运行在浏览器的程序了如何使用go的js库syscall/js来实现与js的相互调用
1、js调用go的方法
我们下面通过go生成一个webassembly程序暴露sum函数让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函数,在控制台可以调用
2、go调用js方法
// main.go
package main
import "syscall/js"
func main() {
alert := js.Global().Get("alert")
alert.Invoke("Hello World!")
}
编译生成main.wasm文件
html<html> <script src="static/wasm_exec.js"></script> <script> const go = new Go(); WebAssembly.i...
点击查看剩余70%
如何修改别人发给我的微信笔记内容?
fbx、obj、glb三维格式模型如何在浏览器中通过three相互转换格式?
python如何实现基于http隧道加密的正向代理服务?
有没有有专门针对 UI 界面截图进行智能标记(Set-of-Mark, SoM) 的开源库和工具?
如何用python实现Set-of-Mark (SoM) 技术?
python如何截取windows指定应用的窗口截图,不用管窗口是不是在最前面?
linux能不能给rm删除命令增加回收站功能,可恢复被删文件?
bfwsoa如何在命令行中执行控制器动作器方法?
RAG(检索增强生成)和 KG(知识图谱)有啥不同?
KVM硬件是啥?


