在 Val 镇上运行 Go

主要观点:作者尝试在 Val Town 上运行 Go HTTP 处理程序,历经 WASI 和 syscall/js 等方法的尝试后,最终选择 Tinygo 和 WASI 实现,包括实现 Go 与 JavaScript 之间的字节传递等操作,最后将其应用于 Val Town 并展示了完整的工作流程。

关键信息:

  • Val Town 是写和部署 TypeScript 的社交网站,不支持 Go 但支持 WASM。
  • 尝试用 Go 的 WASI 支持在 Deno 中运行程序但遇到 DNS 查询问题。
  • 利用 Go 的 syscall/js WASM 绑定实现了 HTTP 请求,但无法运行服务器。
  • 选择 Tinygo 和 WASI,实现了在 Deno 中运行基本的 Tinygo WASM 二进制文件,并完成了 Go 与 JavaScript 之间的请求和响应处理。
  • 在 Val Town 中通过三个不同的 Val 来运行和整合相关代码,包括编译上传 Tinygo WASM 的脚本、HTTP Val 作为 WASM 二进制主机以及处理 WASM<>JS 通信的脚本 Val。

重要细节:

  • 编译 Go 程序为 WASM 二进制文件的命令,如 GOOS=wasip1 GOARCH=wasm go build -o main.wasm./main.goGOOS=js GOARCH=wasm go build -o main.wasm./main.go
  • 相关代码示例,如在 Deno 中运行 Go WASM 的脚本、Go 中的 HTTP 处理程序代码等。
  • 介绍了用于在 Nodejs 和 Tinygo 之间发送字符串和字节的 wasi-tinygo-js 库。
  • 展示了在 Val Town 中各个 Val 的作用和相关代码的运行过程。
阅读 24
0 条评论