一尘不染

在Go AppEngine中读取文件的正确方法

go

使用GoogleAppEngine(Go)读取文件的正确方法是什么?

在Java中,我读到了context.getResourceAsStream,是否有等效的功能?


阅读 211

收藏
2020-07-02

共1个答案

一尘不染

您可以从App Engine上的文件中读取文件,也可以从计算机上运行的Go应用程序中的文件中读取文件。

注意事项:

  • 您应该使用 相对 文件路径,而不是绝对路径。工作目录是应用程序的根文件夹(app.yaml文件所在的位置)。

  • Go代码只能读取属于 应用程序 文件的文件,因此,如果要从Go代码读取文件,则该文件不得与静态文件模式匹配(或者如果它也必须作为静态文件提供,则为application_readable选件)必须在包含/应用于文件的静态文件处理程序中指定,详细信息。

后者在“
应用程序配置”页面的“
静态文件处理程序”部分中进行了详细说明。引用相关部分:

为了提高效率,App
Engine与应用程序文件分开存储和提供静态文件。静态文件在应用程序的文件系统中不可用。如果您有需要由应用程序代码读取的数据文件,则这些数据文件必须是应用程序文件,并且不能与静态文件模式匹配。

因此,假设您data在应用的根目录(位于旁边app.yaml)中有一个文件夹,并且其中有一个文件list.txt。您可以这样阅读其内容:

if content, err := ioutil.Readfile("data/list.txt"); err != nil {
    // Failed to read file, handle error
} else {
    // Success, do something with content
}

或者,如果您想要/需要io.Reader(与许多其他os.File实现io.Reader一起实现):

f, err := os.Open("data/list.txt") // For read access.
if err != nil {
    // Failed to open file, log / handle error
    return
}
defer f.Close()
// Here you may read from f
2020-07-02