首页 > 解决方案 > 我可以在浏览器中运行 Go 编译器吗?

问题描述

我最近发现 Go 可以编译成 WebAssembly。凉爽的!

根据这个Go 文档,Go 工具链本身是用 Go 编写的。

这让我想到,Go 编译器可以在浏览器中运行吗?我可以制作一个通过上传按钮给出文件路径的网站(尽管不上传任何内容),可以编译 Go 项目并将可执行文件作为“下载”返回吗?

我正在寻找的最终结果是一个保存到磁盘的可执行文件,而不是让 Go 代码在浏览器中运行,但我不需要遵循上面的确切场景,只要这是最终结果。

如果这是可能的,有什么限制(如果有的话)?

我看过的其他资源:

  1. GitHub 上从 Go 到 WASM 的编译器
  2. 在浏览器中运行输入围棋代码的游戏的工作人员

编辑:基于一个类似的项目,我已经开始着手这方面的工作。可以在这里找到回购:https ://github.com/TR-SLimey/IBGC

标签: htmlgowebassembly

解决方案


这是可能的,但很难做到。

您无法使用 WebAssembly 访问文件。相反,您需要用户在网页中放置一个文件夹并使用文件和目录条目 API来获取文件及其内容。

但真正的问题是将文件从 JS 传递到 WASM,反之亦然。您还需要在编译器源代码中替换所有对 Go 标准库的调用,这些调用将访问文件以调用 JS 函数。这些函数需要直接访问 WASM 内存。您将需要对编译器进行相当多的修改。

要下载二进制文件,您可以创建一个Blob, 用于URL.createObjectURL()获取该 blob 的 URL,使用 and 创建一个元素<a>,然后使用它。.download = true.href = <the blob URL>.click()

性能可能比直接运行 Go 编译器差,但除此之外它应该可以正常工作。


推荐阅读