首页 > 后端开发 > Golang > 正文

怎样用Golang实现WebAssembly前端 编译Go代码到浏览器运行

P粉602998670
发布: 2025-07-14 08:53:01
原创
329人浏览过

golang编写webassembly前端可通过以下步骤实现:1.安装go环境并确认版本;2.编写go代码(如输出字符串);3.使用goos=js和goarch=wasm编译生成main.wasm文件;4.复制wasm_exec.js并创建html加载wasm文件;5.通过本地http服务器运行页面。此外,可通过js.funcof暴露go函数供js调用,但需注意包体积、兼容性和调试问题。

怎样用Golang实现WebAssembly前端 编译Go代码到浏览器运行

用 Golang 编写 WebAssembly 前端,其实已经不是什么新鲜事了。Go 官方从 1.11 开始就支持将 Go 代码编译成 WebAssembly,直接在浏览器中运行。虽然它不能完全替代 JavaScript,但在一些特定场景下(比如高性能计算、加密解密、游戏逻辑等)非常有用。

怎样用Golang实现WebAssembly前端 编译Go代码到浏览器运行

下面我来一步步讲讲怎么把 Go 代码编译成 WebAssembly,并让它在浏览器里跑起来。

怎样用Golang实现WebAssembly前端 编译Go代码到浏览器运行

准备工作:安装 Go 环境

首先你得装好 Go 环境,推荐使用最新稳定版(比如 1.20 或以上)。你可以去 Go 官网 下载对应系统的版本。

立即学习go语言免费学习笔记(深入)”;

确认安装成功:

怎样用Golang实现WebAssembly前端 编译Go代码到浏览器运行
go version
登录后复制

接着确保你的环境变量配置正确,尤其是 GOPATHGOROOT(如果你是新版 Go,可能默认就不需要特别设置 GOPATH 了)。


第一步:编写一个简单的 Go 文件

我们先写个简单的例子,比如一个能被 JS 调用的函数,用来返回字符串。

新建文件 main.go

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello from Go in WebAssembly!")
}
登录后复制

这个程序很简单,但它会在浏览器控制台输出一句话。接下来我们要把它编译成 .wasm 文件。


第二步:编译 Go 到 WebAssembly

执行以下命令进行编译:

Flawless AI
Flawless AI

好莱坞2.0,电影制作领域的生成式AI工具

Flawless AI 32
查看详情 Flawless AI
GOOS=js GOARCH=wasm go build -o main.wasm main.go
登录后复制

解释一下:

  • GOOS=js 表示目标操作系统是 JavaScript 环境。
  • GOARCH=wasm 指定架构为 WebAssembly。
  • 输出文件是 main.wasm

编译完成后你会看到一个 main.wasm 文件。


第三步:准备 HTML 和 JS 运行环境

Go 提供了一个配套的 JS 脚本,帮助你在浏览器中加载和运行这个 wasm 文件。你需要把这个脚本复制到你的项目目录下。

找到 $GOROOT/misc/wasm/wasm_exec.js 文件,复制到当前目录:

cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
登录后复制

然后创建一个 index.html 文件:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Go + WebAssembly</title>
</head>
<body>
    <script src="wasm_exec.js"></script>
    <script>
        const go = new Go();
        WebAssembly.instantiateStreaming(fetch('main.wasm'), go.importObject).then((result) => {
            go.run(result.instance);
        });
    </script>
</body>
</html>
登录后复制

第四步:用本地服务器运行页面

注意:WebAssembly 需要通过 HTTP 服务加载,不能直接打开 HTML 文件。你可以用 Python 快速启动一个本地服务器:

python3 -m http.server 8000
登录后复制

然后访问 http://localhost:8000,打开控制台就能看到输出:

Hello from Go in WebAssembly!
登录后复制

附加技巧:让 Go 函数可以被 JS 调用

如果你想暴露一些函数给 JS 使用,可以这样做:

package main

import (
    "syscall/js"
)

func add(this js.Value, args []js.Value) any {
    a := args[0].Int()
    b := args[1].Int()
    return a + b
}

func main() {
    c := make(chan struct{}, 0)
    js.Global().Set("addFromGo", js.FuncOf(add))
    <-c // 阻塞住,防止程序退出
}
登录后复制

然后在 JS 中这样调用:

console.log(window.addFromGo(5, 7)); // 输出 12
登录后复制

常见问题提醒

  • 性能问题:Go 的 WASM 包体积较大,因为包含了运行时。适合复杂任务,不适合轻量级逻辑。
  • 兼容性:现代浏览器都支持 WASM,但移动端低版本可能有问题。
  • 调试麻烦:目前调试 Go 的 WASM 代码不如 JS 方便,建议多打日志。

基本上就这些。整个过程不算太难,只是细节容易出错,比如路径不对、JS 加载顺序、跨域问题等。只要一步一步来,基本都能搞定。

以上就是怎样用Golang实现WebAssembly前端 编译Go代码到浏览器运行的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号