html - 我可以在浏览器中运行 Go 编译器吗?
问题描述
我最近发现 Go 可以编译成 WebAssembly。凉爽的!
根据这个Go 文档,Go 工具链本身是用 Go 编写的。
这让我想到,Go 编译器可以在浏览器中运行吗?我可以制作一个通过上传按钮给出文件路径的网站(尽管不上传任何内容),可以编译 Go 项目并将可执行文件作为“下载”返回吗?
我正在寻找的最终结果是一个保存到磁盘的可执行文件,而不是让 Go 代码在浏览器中运行,但我不需要遵循上面的确切场景,只要这是最终结果。
如果这是可能的,有什么限制(如果有的话)?
我看过的其他资源:
编辑:基于一个类似的项目,我已经开始着手这方面的工作。可以在这里找到回购:https ://github.com/TR-SLimey/IBGC
解决方案
这是可能的,但很难做到。
您无法使用 WebAssembly 访问文件。相反,您需要用户在网页中放置一个文件夹并使用文件和目录条目 API来获取文件及其内容。
但真正的问题是将文件从 JS 传递到 WASM,反之亦然。您还需要在编译器源代码中替换所有对 Go 标准库的调用,这些调用将访问文件以调用 JS 函数。这些函数需要直接访问 WASM 内存。您将需要对编译器进行相当多的修改。
要下载二进制文件,您可以创建一个Blob
, 用于URL.createObjectURL()
获取该 blob 的 URL,使用 and 创建一个元素<a>
,然后使用它。.download = true
.href = <the blob URL>
.click()
性能可能比直接运行 Go 编译器差,但除此之外它应该可以正常工作。
推荐阅读
- google-apps-script - 使用 api v4 从谷歌电子表格中获取所有字段
- php - 如何使用 php api 按命名范围插入谷歌表格数据?
- android - 内容更改时,NestedScrollView 在顶部滚动
- mongodb - 连接来自 2 个模型的数据的最佳实践
- github - 如何基于多个工作流触发 GitHub Action 工作流
- sql-server - 使用 pivot 子句时用 0 替换 NULL
- html - 阻止 Blazor WebAssembly 在按 Enter 时提交表单
- c++ - 表示动态类成员变量类型的最佳方法?
- sql - 使用 R DBI 包获取 SQL 表的完整“路径”
- python - 如果文件夹不存在,则引发异常 pathlib python