主要观点:作者尝试在 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.go
和GOOS=js GOARCH=wasm go build -o main.wasm./main.go
。 - 相关代码示例,如在 Deno 中运行 Go WASM 的脚本、Go 中的 HTTP 处理程序代码等。
- 介绍了用于在 Nodejs 和 Tinygo 之间发送字符串和字节的
wasi-tinygo-js
库。 - 展示了在 Val Town 中各个 Val 的作用和相关代码的运行过程。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。