我有以下测试代码

func main() {
    path, err := os.Getwd()
    log.Println(path, err)
    files, err := ioutil.ReadDir("/etc/dse")
    log.Println(files, err)
}

我使用以下命令将其编译为wasm

tinygo build -target wasi -o list.wasm list.go

然后我使用以下命令执行它

wasmtime list.wasm

输出为

2023/05/05 16:00:50 / <nil>
2023/05/05 16:00:50 [] open /etc/dse: errno 76

同时,目录/etc/dse存在并且具有许可777.

此错误的来源是什么?如何修复此错误?

推荐答案

errno 76等于capabilities insufficient.

您必须使用wasmtime选项--dir(请参见wasmtime WASI tutorial)赋予它访问必需目录中的文件的能力:

--dir=选项指示wa mtime预先打开一个目录,并将其作为一种可用于打开该目录内文件的功能提供给程序.

$ wasmtime --dir=/etc/dse list.wasm
2023/05/06 01:36:31 / <nil>
2023/05/06 01:36:31 [] readdir unimplemented : errno 54

不幸的是,readdir还没有在TinyGo中实现.

参考资料:

Go相关问答推荐

有没有更简单的方法在Go中编写这个逻辑?

如何获得与cksum相同的CRC 32?

如何在定制普罗米修斯出口商中测试动态计量注册?

Term~T中的类型不能是类型参数,但可以是引用类型参数的切片

Go GORM创建表,但不创建列

难以为多个平台添加Go Bazel构建选项

+在具有html/模板Golang的Base64中

Go Colly-访问for循环中的URL

Hugo错误:没有为此项目配置现有内容目录

exec的可执行决议.命令+路径

错误!在为 age-viewer-go 运行 wails dev 或 wails build 命令时

加载 docker 镜像失败

获取 nil 指针类型的 reflect.Value

在两个单独的速率受限端点之间同步请求

当图像是对象数组的元素时,如何显示存储为页面资源的图像?

Gorm 预加载给出了模糊的列错误

Go 并发、goroutine 同步和关闭通道

使用 oklog/run 来自 Go 编译器的错误(无值)用作值

合并几千万文件最快的方法是什么

Scanner.Buffer - 最大值对自定义拆分没有影响?