WebAssembly (Wasm) 是一种新型的、轻量级的虚拟机,可以运行在任何支持 Wasm 的平台上。Go 语言从版本 1.11 开始支持将代码编译成 WebAssembly。本章将详细介绍如何使用 Go 语言编写并编译 WebAssembly 模块,并展示如何在网页上加载和使用这些模块。
安装必要的工具
首先,确保你的开发环境已经安装了 Go 语言的最新版本。你可以通过以下命令检查已安装的 Go 版本:
go version
如果尚未安装 Go,请访问 Go 官方网站 下载并安装适合你操作系统的版本。
接下来,安装 wasm-tools
,这是一个用于生成和操作 WebAssembly 文件的工具集。你可以使用以下命令安装:
go install mvdan.cc/wasm/tools/cmd/wasm-tools@latest
此外,还需要一个 Web 服务器来测试和部署你的 WebAssembly 应用程序。这里推荐使用 http-server
,一个简单易用的 Node.js 静态文件服务器。如果你还没有安装 Node.js 和 npm,请先安装它们,然后使用以下命令安装 http-server
:
npm install -g http-server
编写一个简单的 Go 程序
创建一个新的 Go 项目目录,并在其中创建一个名为 main.go
的文件。在这个文件中,我们将编写一个简单的 Go 函数,稍后将其编译为 WebAssembly 模块。
-- -------------------- ---- ------- -- ------- ------- ---- ------ ----- -- -------- -------- ---- --- -- ------ ---- ---------- ---- ---------- ------- ------ - ------ ------------------- ----- ----- -
这个例子中定义了一个 Greet
函数,该函数接收一个字符串参数 name
并返回一个问候语。
编译 Go 程序为 WebAssembly
使用 Go 工具链将上述 Go 程序编译为 WebAssembly。在项目目录中执行以下命令:
GOARCH=wasm GOOS=js go build -o main.wasm
这将生成一个名为 main.wasm
的 WebAssembly 文件。
创建 HTML 页面来加载 WebAssembly 模块
为了在浏览器中运行我们的 WebAssembly 模块,我们需要创建一个 HTML 页面来加载它。创建一个名为 index.html
的文件,并添加以下内容:
-- -------------------- ---- ------- --------- ----- ----- ---------- ------ ----- ---------------- --------- ----------- --------------- ------- ------ ------ ----------- ------------ -- ------------------ ------- -------------- ------ ---- ---- ------------ ----- -------- ----- - ----- ------- ----- -------- - --------------- ----------------------------------------------- - --------- - ------ --------- ------- -------
注意,这个 HTML 文件引用了 main.js
脚本,该脚本是由 Go 编译器生成的 JavaScript 包装器。你需要确保 main.js
文件存在于与 index.html
相同的目录下。
生成 JavaScript 包装器
Go 编译器会为 WebAssembly 模块生成一个 JavaScript 包装器。这个包装器提供了初始化和调用 WebAssembly 函数的方法。为了生成这个包装器,需要运行以下命令:
GOARCH=wasm GOOS=js go build -o main.wasm
上面的命令实际上已经在前面完成了。现在,你需要使用 wasm-bindgen
工具生成 JavaScript 包装器。首先,确保已经安装了 wasm-bindgen
:
cargo install wasm-bindgen-cli
然后,使用 wasm-bindgen
生成 JavaScript 包装器:
wasm-bindgen main.wasm --out-dir . --target web
这将在当前目录下生成 main.js
文件。
启动本地服务器
最后一步是启动本地服务器来预览你的应用程序。打开终端,导航到项目目录,并运行以下命令:
http-server .
这将启动一个 HTTP 服务器,默认监听 8080 端口。打开浏览器,访问 http://localhost:8080
即可看到你的 WebAssembly 应用程序。
总结
通过本章的学习,你应该已经掌握了如何使用 Go 语言编写并编译 WebAssembly 模块,并且了解了如何在网页上加载和使用这些模块。下一章将深入探讨更复杂的 WebAssembly 应用场景。