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的弹窗。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_李少侠_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值