【问题标题】:Why does run fail after I compile a GoLang project to Web Assembly?为什么编译GoLang项目为WebAssembly后运行失败?
【发布时间】:2023-01-19 01:17:41
【问题描述】:

我在 Visual Studio Code 中创建了一个 Go(lang) 项目。我创建了一个将编译为 WebAssembly 的 main.go 文件,以及另一个我将作为服务器运行的 main.go(为我的 Web Assembly 胶水文件提供服务)。

作为参考,我在这里学习教程:https://golangbot.com/webassembly-using-go/

在 Visual Studio Code 终端中,我执行以下操作:

[用第一个 main.go 进入我的 wasm 源文件夹]

${env:GOOS} = "js" ${env:GOARCH} = "wasm"

去构建-o ../../assets/json.wasm

[与其他 main.go 一起 cd 到我的服务器文件夹]

去运行 main.go

[我收到以下错误]

exec: "C:\Users\...\AppData\Local\Temp\go-build3258126417\b001\exe\main": 文件不存在

我能够在构建之前运行这个服务器。这是怎么回事?

这应该刚刚运行。但是现在我无法运行服务器。我收到奇怪的“文件不存在”错误。

【问题讨论】:

    标签: go webassembly


    【解决方案1】:

    我花了很多时间试图弄清楚这一点,终于明白了!这是交易:

    build go 命令(对于 webassembly)所需的 GOOS 和 GOARCH 环境变量之一或两者似乎与 go run 命令冲突。我不知道为什么。我以一种倒退的方式发现了这一点。

    (TLDR:使用不同的终端来构建和运行并且不要全局设置这些环境变量——在每次构建之前设置它们)。

    使用 Visual Studio Code Powershell 终端,我设置了这两个变量(或者我认为是这样),然后运行构建。然后我运行服务器以尝试查看我的劳动成果,并在 Chrome 控制台中出现一个奇怪的错误(关于期待一个神奇的词但收到另一个)。事实证明这个错误是相当普遍的,经过一些谷歌搜索后,确定它可能意味着我的构建发生了一些事情。在多次尝试构建失败后,我决定在 Windows 中设置环境变量(作为 SYSTEM 变量),这样我就不必在构建时继续设置它们。

    我再次构建(仍然没有构建错误),但是当我去运行服务器时,我得到了

    exec: "C:Users...AppDataLocalTempgo-build3258126417001exemain": 文件不存在

    错误。此时,我无法在任何项目中运行我的任何 Go 服务器。由于我所做的唯一“全局”事情是设置这 2 个环境变量,我决定删除它们。我现在可以运行我的 Go 服务器了。但我仍然无法在浏览器中执行我的构建。这是怎么回事??

    我认为由于设置全局环境变量会产生影响(尽管有负面影响),而在每次构建之前直接在终端中手动设置它们时我没有遇到过这个问题,那么我的方式可能有问题正在设置变量(我不经常使用 Powershell)。

    经过更多谷歌搜索和一些实验后,我发现了在终端中设置这些变量的“正确”方法(在我的原始问题中注明)。因此,在构建之前手动设置它们(以正确的方式)修复了构建问题(由于未正确设置这些变量,因此构建不正确)。

    现在我知道变量设置正确了,因为现在我在构建之前手动设置它们时遇到了那个错误。那么现在怎么办?

    我build完就把terminal杀了,然后再启动一个新的terminal,运行成功。

    所以底线:运行服务器时不应设置 GOOS 和 GOARCH 环境变量,因此不要在用于构建 Web 程序集代码的同一终端中启动服务器!

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 2013-05-14
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多