html - 我可以在浏览器中运行Go编译器吗?

标签 html go webassembly

我最近发现Go可以编译为WebAssembly。凉!
根据this Go文档,Go工具链本身是用Go编写的。
这让我想到,Go编译器可以在浏览器中运行吗?我可以创建一个通过上传按钮指定文件路径的网站(尽管不上传任何内容),可以编译Go项目并将可执行文件作为“下载”返回吗?
我正在寻找的最终结果是一个保存到磁盘的可执行文件,而不是让Go代码在浏览器中运行,但是我不需要上面的确切方案,只要这是最终结果即可。
如果可能,限制是什么(如果有)?
我看过的其他资源:

  • A compiler from Go to WASM on GitHub
  • Someone working on a game where entered Go code runs in the browser
  • 最佳答案

    可以,但是很难做到。
    您无法使用WebAssembly访问文件。相反,您需要用户在网页内放置一个文件夹,并使用File and Directory Entries API获取文件及其内容。
    但是真正的问题是将文件从JS传递到WASM,反之亦然。您还需要在编译器源代码中替换对Go标准库的所有调用,这些访问将访问对JS函数的调用的文件。这些功能需要直接访问WASM存储器。您将需要大量修改编译器。
    要下载二进制文件,可以创建一个Blob,使用 URL.createObjectURL() 获取指向该blob的URL,使用<a>.download = true创建一个.href = <the blob URL>元素,然后对其进行.click()
    性能可能比直接运行Go编译器差,但除此之外,它应该可以正常工作。

    关于html - 我可以在浏览器中运行Go编译器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62720303/

    相关文章:

    html - 具有 UTF 图标的 HTML-Select 的配置

    jQuery - 如果悬停则更改背景图像

    go - 将 db 变量传递给函数参数

    html - 如何在 Golang 模板中打印新行?

    c++ - OpenCV WebAssembly

    dom - 如何从 WebAssembly 文本格式访问 DOM?

    html - 为什么我的图片没有出现 Html?

    html - Css3 转换动画在 IE 11 中不适用于动态创建的元素

    make btcd : undefined: time. 出错直到

    javascript - 为什么 Rust WASM 在计算素数时比 JavaScript 慢