登录
首页 >  Golang >  Go问答

理解不了 go embed

来源:stackoverflow

时间:2024-03-14 11:54:26 140浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《理解不了 go embed》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

目标是在我的二进制文件中嵌入目录树,然后将其复制到用户目录。它主要由文本文件组成。我正在尝试显示项目内名为 .config 的子目录中的文件内容(因此使用 go:embed all)。

据我了解 go 嵌入,以下内容应该在其自己的目录之外工作,但是在执行时,列出第一个的名称 文件位于目录树中,但无法打开它或显示其内容。在它自己的项目目录中它工作得很好。

//go:embed all:.config
var configFiles embed.FS

func main() {
    ls(configFiles)
}

func ls(files embed.FS) error {
    fs.WalkDir(files, ".", func(path string, d fs.DirEntry, err error) error {
        if err != nil {
            return err
        }
        if !d.IsDir() {
            show(path) // Display contents of file
        }
        return nil
    })
    return nil
}

(完整代码位于 https://go.dev/play/p/a0hzd0rbvx - 但它不起作用,因为没有 .config 目录)


正确答案


程序遍历嵌入式文件系统,但使用操作系统打开文件。通过打开文件系统中的文件进行修复。

将文件系统传递给show

if !d.isdir() {
        show(files, path) // <-- pass files here
    }

使用文件系统打开文件:

func show(files fs.FS, filename string) { // <-- add arg here
    f, err := files.Open(filename)        // <-- FS.Open

终于介绍完啦!小伙伴们,这篇关于《理解不了 go embed》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>