千家信息网

golang语言中wasm 环境搭建的过程是怎样的

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇文章为大家展示了golang语言中wasm 环境搭建的过程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。golang 安装通过官方地址 下载。Ma
千家信息网最后更新 2026年11月01日golang语言中wasm 环境搭建的过程是怎样的

本篇文章为大家展示了golang语言中wasm 环境搭建的过程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

golang 安装

通过官方地址 下载。MacOS 也可通过 brew 快速安装:

$ brew install golang$ go versiongo version go1.17.2 darwin/arm64

golang 环境测试

新建文件 main.go ,写入:

package mainimport "fmt"func main() {  fmt.Println("Hello World!")}

执行 go run main.go ,将输出:

$ go run main.go
Hello World!

如果启用了 GO MODULES ,则需要使用 go mode init 初始化模块,或设置 GO111MODULE=auto 。

将 golang 打包为 WASM

通常有两种打包方式,一种是 golang 自带的,另外是使用 tinygo 。推荐使用 tinygo ,因为编译出的 wasm 模块更小。

  • 使用 golang 原生编译

在编译 wasm 模块前,需要设置 golang 交叉编译参数,目标系统 GOOS=js 和目标架构 GOARCH=wasm ,编译 wasm 模块:

// macos$ GOOS=js GOARCH=wasm go build -o main.wasm// windows 临时设置 golang 环境参数(仅作用于当前CMD)$ set GOOS=js $ set GOARCH=wasm$ go build -o main.wasm
  • 使用 tinygo 编译

直接按照官方文档安装即可,MacOS 如下:

$ brew tap tinygo-org/tools$ brew install tinygo$ tinygo versiontinygo version 0.20.0 darwin/amd64 (using go version go1.17.2 and LLVM version 11.0.0)

使用以下命令对 main.go 再次进行打包:

$ tinygo build -o main-tiny.wasm

  • 打包文件大小对比

$ du -sh ./*.wasm228K    ./main-tiny.wasm1.9M    ./main.wasm

在浏览器中跑起来

要想在浏览器中跑 main.wasm ,首先需要 JS 胶水代码,golang 已经为我们提供了,直接复制过来。需要注意的是,使用 tinygo 和 原生编译的胶水代码是有差异的,根据具体情况拷贝对应的:

// 原生编译$ cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .// tinygo编译$ cp "$(tinygo env TINYGOROOT)/targets/wasm_exec.js" ./wasm_exec_tiny.js

其次,需要一个 HTML 入口文件,创建 index.html 文件,并写入以下代码:

        Document    

最后,起一个 http server 让它跑起来吧~

// python$ python3 -m http.server$ python2 -m SimpleHTTPServer// node$ npm i -g http-server$ hs// gp$ go get -u github.com/shurcooL/goexec$ goexec 'http.ListenAndServe(`:8080`, http.FileServer(http.Dir(`.`)))'

异常记录

  • 通过 node 的 http-server 起的服务,加载会报错:

> TypeError: Failed to execute 'compile' on 'WebAssembly': Incorrect response MIME type. Expected 'application/wasm'.

原因是 wasm 文件响应头的 content-type 为 application/wasm; charset=utf-8 ,应该为 application/wasm 。已知的解决方法为修改 HTML 中 wasm 的初始化方式为:

fetch('./main-tiny.wasm')  .then(res => res.arrayBuffer())  .then(buffer => {    WebAssembly.instantiate(buffer, go.importObject)      .then(res => {        go.run(res.instance);      })  })

上述内容就是golang语言中wasm 环境搭建的过程是怎样的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

编译 文件 环境 模块 代码 语言 过程 内容 参数 官方 技能 方式 方法 浏览器 目标 知识 胶水 浏览 简明 简明扼要 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网佳科技有限公司 高科技与互联网 互联网 科技创业 奇酷互联网科技 善班互联网科技有限公司 融贸通互联网科技 上海万想互联网科技 一五八零互联网科技 联恩商钥互联网科技有限公司 恒生科技互联网指数分析 玖二柒互联网科技公司待遇 受益于互联网科技的高速发展 广西互联网科技孵化中心 上海科技产业互联网平台 2021互联网科技公司排名 上海钢联属于互联网科技股吗 四川互联网展示科技馆设计 云鲸互联网络科技有限公司 安徽零酒互联网科技有限公司 承德科技产业互联网平台 喔噻互联网科技有限公司 金融科技创新监管互联网金融 宜安科技 互联网金融 广州紫鲸互联网科技 青岛中康互联网医疗科技有限公司 重庆互联网医院沙龙医盟信息科技 互联网科技公司营业执照怎么办理 智帮互联网科技公司最近动向 陕西九四连强互联网科技有限公司 盐城市攀科互联网科技有限公司
0