gpt4 book ai didi

go - 构建约束排除所有 Go 文件

转载 作者:行者123 更新时间:2023-12-01 22:05:53 36 4
gpt4 key购买 nike

这是我第一次尝试做 Webassembly,我遇到了一个问题。

我正在使用:go版本go1.14.3 linux/amd64

代码正确编译:

GOARCH=wasm GOOS=js go build -o lib.wasm main.go

当我这样做时:go run main.go

我收到以下错误:

ma​​in.go:8:2: 构建约束排除了/usr/local/go/src/syscall/js 中的所有 Go 文件

有什么解决办法吗?

package main

import (
"flag"
"log"
"net/http"
"strconv"
"syscall/js"
)

var (
listen = flag.String("listen", ":8080", "listen address")
dir = flag.String("dir", ".", "directory to serve")
)

func add(i []js.Value) {
value1 := js.Global().Get("document").Call("getElementById", i[0].String()).Get("value").String()
value2 := js.Global().Get("document").Call("getElementById", i[1].String()).Get("value").String()

int1, _ := strconv.Atoi(value1)
int2, _ := strconv.Atoi(value2)

js.Global().Get("document").Call("getElementById", i[2].String()).Set("value", int1+int2)
}


func subtract(i []js.Value) {
value1 := js.Global().Get("document").Call("getElementById", i[0].String()).Get("value").String()
value2 := js.Global().Get("document").Call("getElementById", i[1].String()).Get("value").String()

int1, _ := strconv.Atoi(value1)
int2, _ := strconv.Atoi(value2)

js.Global().Get("document").Call("getElementById", i[2].String()).Set("value", int1-int2)
}

func registerCallbacks() {
js.Global().Set("add", new(func()))
js.Global().Set("subtract", new(func()))
//js.Global().Set("subtract", js.NewCallback(subtract))

//cannot use add (type func([]js.Value)) as type func(js.Value, []js.Value) interface {} in argument to js.FuncOf
//js.Global().Set("add", js.FuncOf(add))
//js.Global().Set("subtract", js.FuncOf(subtract))
}

func main() {
flag.Parse()
log.Printf("listening on %q...", *listen)
log.Fatal(http.ListenAndServe(*listen, http.FileServer(http.Dir(*dir))))
c := make(chan struct{}, 0)

println("WASM Go Initialized")
// register functions
registerCallbacks()
<-c
}

最佳答案

您不能将 go runGOARCH=wasm 一起使用; go run 执行构建的二进制文件,因为它不是操作系统 native 二进制文件而是 wasm 它将以操作系统不理解它的格式而告终。

关于如何直接使用 wasm_exec.js shim 和 Node.js 执行 WebAssembly 二进制文件的说明写在 WebAssembly wiki page of golang/go repository 上.

要在浏览器中运行测试,有很好的 Golang 包 agnivade/wasmbrowsertest .

关于go - 构建约束排除所有 Go 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61901809/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com