我可以 运行 浏览器中的 Go 编译器吗?
Can I run the Go compiler in the browser?
我最近发现 Go 可以编译为 WebAssembly。酷!
根据 this Go 文档,Go 工具链本身是用 Go 编写的。
这让我想到,Go 编译器可以在浏览器中 运行 吗?我可以制作一个通过上传按钮给出文件路径的网站(尽管没有上传任何东西),可以编译 Go 项目和 return 可执行文件作为“下载”吗?
我正在寻找的最终结果是一个保存到磁盘的可执行文件,而不是在浏览器中 运行 的 Go 代码,但我不需要上面的确切场景作为只要那是最后的结果。
如果可行,有什么限制?
我看过的其他资源:
- A compiler from Go to WASM on GitHub
- Someone working on a game where entered Go code runs in the browser
编辑:我已经开始基于类似的项目进行此工作。可以在此处找到回购协议:https://github.com/TR-SLimey/IBGC
可以,但很难做到。
您无法使用 WebAssembly 访问文件。相反,您需要用户在网页中放置一个文件夹并使用 File and Directory Entries API 获取文件及其内容。
但真正的问题是将文件从 JS 传递到 WASM,反之亦然。您还需要在编译器源代码中替换所有对 Go 标准库的调用,这些调用将访问文件以调用 JS 函数。这些功能需要直接访问 WASM 内存。您将需要对编译器进行大量修改。
要下载二进制文件,您可以创建一个 Blob
,使用 URL.createObjectURL()
为该 blob 获取一个 URL,使用 [=13 创建一个 <a>
元素=] 和 .href = <the blob URL>
,然后 .click()
它。
性能可能比 运行 直接使用 Go 编译器差,但除此之外它应该可以正常工作。
我最近发现 Go 可以编译为 WebAssembly。酷!
根据 this Go 文档,Go 工具链本身是用 Go 编写的。
这让我想到,Go 编译器可以在浏览器中 运行 吗?我可以制作一个通过上传按钮给出文件路径的网站(尽管没有上传任何东西),可以编译 Go 项目和 return 可执行文件作为“下载”吗?
我正在寻找的最终结果是一个保存到磁盘的可执行文件,而不是在浏览器中 运行 的 Go 代码,但我不需要上面的确切场景作为只要那是最后的结果。
如果可行,有什么限制?
我看过的其他资源:
- A compiler from Go to WASM on GitHub
- Someone working on a game where entered Go code runs in the browser
编辑:我已经开始基于类似的项目进行此工作。可以在此处找到回购协议:https://github.com/TR-SLimey/IBGC
可以,但很难做到。
您无法使用 WebAssembly 访问文件。相反,您需要用户在网页中放置一个文件夹并使用 File and Directory Entries API 获取文件及其内容。
但真正的问题是将文件从 JS 传递到 WASM,反之亦然。您还需要在编译器源代码中替换所有对 Go 标准库的调用,这些调用将访问文件以调用 JS 函数。这些功能需要直接访问 WASM 内存。您将需要对编译器进行大量修改。
要下载二进制文件,您可以创建一个 Blob
,使用 URL.createObjectURL()
为该 blob 获取一个 URL,使用 [=13 创建一个 <a>
元素=] 和 .href = <the blob URL>
,然后 .click()
它。
性能可能比 运行 直接使用 Go 编译器差,但除此之外它应该可以正常工作。