生成约束排除所有Go文件
这是我第一次尝试进行Webassembly,我遇到了一个问题 我正在使用: go版本go1.14.3 linux/amd64 代码可通过以下方式正确编译: GOARCH=wasm GOOS=js go build-o lib.wasm main.go 当我这样做的时候:去运行main.go 我得到以下错误: main.go:8:2:构建约束排除/usr/local/go/src/syscall/js中的所有go文件 有什么办法解决这个问题吗生成约束排除所有Go文件,go,webassembly,Go,Webassembly,这是我第一次尝试进行Webassembly,我遇到了一个问题 我正在使用: go版本go1.14.3 linux/amd64 代码可通过以下方式正确编译: GOARCH=wasm GOOS=js go build-o lib.wasm main.go 当我这样做的时候:去运行main.go 我得到以下错误: main.go:8:2:构建约束排除/usr/local/go/src/syscall/js中的所有go文件 有什么办法解决这个问题吗 package main import (
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
}
不能使用GOARCH=wasm的go-run;go run执行构建的二进制文件,因为它不是OS本机二进制文件,而是wasm,所以最终操作系统将无法理解它的格式
关于如何直接使用wasm_exec.js shim和Node.js来执行WebAssembly二进制文件的说明已记录在上
要在浏览器中运行测试,有一个很好的Golang包。您不能使用GOARCH=wasm的go-run;go run执行构建的二进制文件,因为它不是OS本机二进制文件,而是wasm,所以最终操作系统将无法理解它的格式
关于如何直接使用wasm_exec.js shim和Node.js来执行WebAssembly二进制文件的说明已记录在上
要在浏览器中运行测试,有一个很好的Golang软件包。不要使用go run。为什么要使用go-run?此go-run main.go弊大于利。这看起来很无辜,但不是下面公认的答案所指出的,有一种方法可以让‘GOOS=js GOARCH=wasm去运行main.go’去工作。使用类似wasmbrowsertest的工具将go_js_wasm_exec二进制文件放入路径中,“go run”和“go test”将拾取它并使用它将wasm文件传递给chromedp。使获得测试结果感觉很快。不要使用go run。为什么要使用go-run?此go-run main.go弊大于利。这看起来很无辜,但不是下面公认的答案所指出的,有一种方法可以让‘GOOS=js GOARCH=wasm去运行main.go’去工作。使用类似wasmbrowsertest的工具将go_js_wasm_exec二进制文件放入路径中,“go run”和“go test”将拾取它并使用它将wasm文件传递给chromedp。使获得测试结果的感觉是瞬间的。感谢您参考wasmbrowsertest。它非常有用。在遵循安装说明之后,“GOOS=js GOARCH=wasm go run main.go”起了作用,因为它使用了“go run”的技巧来查找与go_js_wasm_exec名称匹配的可执行文件,从而将wasm传递给chromedp。在你读过一点之前,这似乎是一种魔力。谢谢你参考wasmbrowsertest。它非常有用。在遵循安装说明之后,“GOOS=js GOARCH=wasm go run main.go”起了作用,因为它使用了“go run”的技巧来查找与go_js_wasm_exec名称匹配的可执行文件,从而将wasm传递给chromedp。看起来像是魔法,直到你读了一点。