如何访问模块中的文件

How to access files in a module

提问人:saados 提问时间:11/16/2023 最后编辑:Jonathan Hallsaados 更新时间:11/16/2023 访问量:61

问:

我有一个 Go 服务器,它应该使用我放在模块(库)(xml 文件)中的文件。 我怎样才能访问它? 我在模块内有一个文件夹“xml”,我想接收其中的所有文件。 我创建了一个读取文件的函数,但由于模块中的文件我无法访问它。 由于它是从服务器触发的,因此无法识别路径。 我怎样才能克服这样的用例?

我试图将函数签名更改为GetXml(folderPath string)并使用“module-name/xml”调用它,但它不起作用。 我希望成功访问模块中的文件

一个不太好的选择是直接从存储库访问文件,但使用 go(本地和 Docker)。

更新我发现了问题所在。使用嵌入库的文件的名称具有“”而不是“/”,因此读取文件失败 - xml\s.xml 有人知道为什么会这样吗?

go 模块

评论

1赞 erik258 11/16/2023
请记住,由于它是编译语言,因此 Go 模块源文件通常不会与可执行文件一起分发。听起来你想要的是将XML文件从模块中分离出来,并将它们视为单独提供的运行时数据;或使用 pkg.go.dev/embed 将它们嵌入到可执行文件中。
1赞 Volker 11/16/2023
使用包嵌入和嵌入它们。你实际上不能做你想做的事,因为 Go 不是这样工作的。
0赞 saados 11/16/2023
//go:embed xml/* var Content embed.FS我在依赖模块中创建了这个,我应该如何从服务中的目录中访问文件?此代码似乎不起作用并无法识别文件err := fs.WalkDir(Content, ".", func(path string, d fs.DirEntry, err error) error { if err != nil { panic(err) } if d.IsDir() { return nil } b, err := fs.ReadFile(static, path) if err != nil { return err }
1赞 erik258 11/16/2023
请在原始问题中展示您的行为的完整再现。当然不是评论中的代码块。听起来你已经在使用,路径分隔符是窗口风格的,而不是 unix 风格的。这里涉及哪些操作系统?embed

答: 暂无答案