如何使用 Go 从磁盘读取文件并将其传递给 WebAssembly?

具体<input type="file">在Go中如何与这个函数对接?我知道有“syscall/js”包,但我没有找到任何文件读取的例子。


func parseCSVFile(filePath string) []LabelWithFeatures {

    fileContent, _ := ioutil.ReadFile(filePath)

    lines := bytes.Split(fileContent, newline)

    numRows := len(lines)


    labelsWithFeatures := make([]LabelWithFeatures, numRows-2)


    for i, line := range lines {

        // skip headers

        if i == 0 || i == numRows-1 {

            continue

        }

        labelsWithFeatures[i-1] = NewLabelWithFeatures(bytes.Split(line, comma))

    }

    return labelsWithFeatures

}


MYYA
浏览 282回答 2
2回答

慕容708150

多年来我一直想要一个满意的答案,前几天晚上终于想通了。您基本上可以将整个事情归结为:    fileInput := document.Call("getElementById", "fileInput")    fileInput.Set("oninput", js.FuncOf(func(v js.Value, x []js.Value) any {        fileInput.Get("files").Call("item", 0).Call("arrayBuffer").Call("then", js.FuncOf(func(v js.Value, x []js.Value) any {            data := js.Global().Get("Uint8Array").New(x[0])            dst := make([]byte, data.Get("length").Int())            js.CopyBytesToGo(dst, data)            // the data from the file is in dst - do what you want with it                        return nil        }))        return nil    }))

慕侠2389804

您无法真正在浏览器中访问文件系统。wasm_exec.js用于在浏览器中执行 Go webassembly,它模拟了一些文件系统功能,但我认为它对你不是很有用,文件读取方法甚至默认返回错误。你提到了<input type="file">。您可以从上传的文件中获取字节:Getting byte array through input type = file。然后,您可以将这些字节传递给 Golang wasm 运行时。在您的 Go 代码中定义一个全局系统调用/js 回调,并从浏览器调用它以将字节向下传递到 Go 运行时。我会寻找关于如何在 Go 运行时中定义回调的博文。还要注意 go 1.11 和 1.12 之间的变化,api 有重大变化。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go