使用 ../ at go:embed 注释

using ../ at go:embed annotation

我想嵌入一个比golang文件代码高一级的文件。 例如:

目录 1

目录 2

如何使用 go:embed 将 file.txt 嵌入 file.go?

documentation 状态:

Patterns may not contain ‘.’ or ‘..’ or empty path elements, nor may they begin or end with a slash.

因此不直接支持您尝试执行的操作。更多信息可在 this issue.

的评论中找到

你可以做的一件事是在 dir2 中放入一个 go 文件,在其中嵌入 file.txt,然后在 dir1/file.go 中嵌入 import/use(假设文件夹是在同一个包中)。

正如@Brits (https://pkg.go.dev/embed)

所述,嵌入包中不支持此功能

我喜欢使用的一种模式是在我项目的 internal 包中创建一个 resources.go 文件,并将我所有的嵌入式资源放入其中,例如:

├── cmd\ 
│   └── cool.go
└── internal\
    └── resources\
        ├── resources.go
        ├── fonts\
        │   └── coolfont.ttf
        └── icons\
            └── coolicon.ico

resources.go

import _ "embed"

//go:embed fonts/coolfont.fs
var fonts byte[] // embed single file

//go:embed icons/*
var icons embed.FS // embed whole directory

有些库也可以帮助解决这个问题,例如此处列出的库 https://github.com/avelino/awesome-go#resource-embedding

但我还没有 运行 进入普通旧嵌入不能满足我需求的用例。