发布于 2026-01-06 7 阅读
0

快速教程:编写 Go 代码,运行 WASM!

快速教程:编写 Go 代码,运行 WASM!

在 Go 1.11 发布之前(该版本引入了对 WebAssembly (简称 WASM) 的实验性移植),我将演示如何将 Go 源代码编译成 WASM 并在浏览器中执行!

以下是步骤:

  1. 设置go1.11beta3
  2. 编译转到 WASM
  3. 使用 HTML 和 JavaScript 加载 WASM
  4. 启动一个Web服务器
  5. 打开网站!

步骤 1:设置go1.11beta3

虽然我们需要 Go 1.11 版本(目前仍处于 beta 测试阶段,预计 8 月份发布!),但由于 Go 是开源的,我们可以直接下载最新的 beta 版本。

https://github.com/golang/go/releases/tag/go1.11beta3

$ go get golang.org/dl/go1.11beta3
$ go1.11beta3 download
# => Success. You may now run 'go1.11beta3'
Enter fullscreen mode Exit fullscreen mode

步骤 2:编译 转到 WASM

我们现在可以编写 Go 代码了!计划是hello, Go/WASM!在浏览器中(在开发者控制台中)打印经典的 Go 代码。

// main.go
package main

import "fmt"

func main() {
    fmt.Println("hello, Go/WASM!")
}
Enter fullscreen mode Exit fullscreen mode

要将我们的 Go 程序编译成 WASM,我们使用命令go build

注意:我们需要告诉 Go 为 Web 环境编译,而不是为默认环境(即我们的计算机)编译。因此,我们需要设置环境变量GOOS=js并将GOARCH=wasm目标环境设置为 Web。

$ GOOS=js GOARCH=wasm go1.11beta3 build -o test.wasm main.go
Enter fullscreen mode Exit fullscreen mode

步骤 3:使用 HTML 和 JavaScript 加载 WASM

这一步并不难;Go 团队已经为我们准备了一些文件供我们进行实验。

# -s == silent mode
# -O == output mode
$ curl -sO https://raw.githubusercontent.com/golang/go/master/misc/wasm/wasm_exec.html
$ curl -sO https://raw.githubusercontent.com/golang/go/master/misc/wasm/wasm_exec.js
Enter fullscreen mode Exit fullscreen mode

步骤 4:启动 Web 服务器

现在我们需要启动一个简单的 Web 服务器来提供一些静态资源。这只需要几行代码:

// server.go
package main

import (
    "flag"
    "log"
    "net/http"
)

func main() {
    port := flag.String("port", "8000", "port")
    flag.Parse()
    log.Fatal(http.ListenAndServe(":"+*port, http.FileServer(http.Dir("."))))
}

Enter fullscreen mode Exit fullscreen mode

开始吧!干杯!

$ go1.11beta3 run server.go

# or to run on a different port:
# $ go1.11beta3 run -port=8080 server.go
Enter fullscreen mode Exit fullscreen mode

第五步:打开网站!

打开localhost:8000/wasm_exec.html

注意:在编译后的 WASM 加载之前,“运行”按钮(位于左上角)将显示为禁用状态。

启用“运行”按钮后,打开控制台并按下该按钮!

hello, Go/WASM!??

恭喜!🎉

你刚刚通过 WASM 编译、加载并运行了一个 Go 程序!

是真的吗?

为什么不确认一下响应头里Content-Type是否包含了这个信息呢? ;)application/wasmtest.wasm

致谢

感谢ZAYDEK推荐我将文章翻译成英文并审阅了这篇文章。

参考

文章来源:https://dev.to/cia_rana/quick-tutorial-write-go-run-wasm-2ilf