构建约束排除所有 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 文件


任何想法如何解决这个问题?


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

}


收到一只叮咚
浏览 863回答 1
1回答

慕森王

你不能使用go runwith&nbsp;GOARCH=wasm;&nbsp;go run执行构建的二进制文件,因为它不是操作系统本机二进制文件,但wasm最终会导致操作系统不理解它的格式。如何直接使用wasm_exec.jsshim 和 Node.js 执行 WebAssembly 二进制文件的说明写在golang/go repository 的 WebAssembly wiki 页面上。要在浏览器中运行测试,有很好的 Golang 包agnivade/wasmbrowsertest。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go