Go WebAssembly 入门

WebAssembly 可以将其他语言C/Go/Rust等语言编译成wasm可执行二进制文件,然后通过浏览器来执行wasm。

本文以 Go 语言为例,介绍 WebAssembly 入门。

1、编写 main.go 文件,在 Go 代码中获取js对象,执行 js 代码。

引入syscall/js, 通过js.Global().Get()获取js对象。
js.Global().Get()既可以获取函数、也可以获取DOM元素。类型是js.Value。
如:js.Global().Get(“alert”)

package main

import (
	"fmt"
	"syscall/js"
)

func main() {
    
    
	fmt.Println("Hello, Go WebAssembly!")
    alert := js.Global().Get("alert")
    alert.Invoke("Hello, Go WebAssembly!")
}

2、把 main.go 构建成wasm二进制文件

GOOS=js GOARCH=wasm go build -o lib.wasm main.go

3、把JavaScript依赖拷贝到当前路径

cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .

4、创建index.html,并引入wasm_exec.js,调用第二步构建的lib.wasm

<html>
     <head>
         <meta charset="utf-8">
         <script src="wasm_exec.js"></script>
         <script>
             const go = new Go();
             WebAssembly.instantiateStreaming(fetch("lib.wasm"), go.importObject).then((result) => {
      
      
                 go.run(result.instance);
             });
         </script>
     </head>
     <body>
     </body>
</html>

5、创建 server.go 监听8080端口,serve当前路径

package main

import (
        "net/http"
        "log"
)

func main() {
    
    
	err := http.ListenAndServe(":8080", http.FileServer(http.Dir(".")))
    log.Fatalln(err)
}

6、启动服务

go run server.go

浏览器访问http://localhost:8080
我们可以看到,浏览器控制台打印的有 fmt.Println("Hello, Go WebAssembly!") 输出结果。并且页面弹出了go调用alert的弹窗。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45804031/article/details/127741426