英文:
using ../ at go:embed annotation
问题
我想要嵌入一个位于 golang 代码文件的上一级目录的文件。
例如:
dir1
- file.go
dir2
- file.txt
如何使用 go:embed 将 file.txt 嵌入到 file.go 中?
英文:
I want to embed a file placed one level above the golang file code.
for example:
dir1
- file.go
dir2
- file.txt
How to embed file.txt inside file.go using go:embed?
答案1
得分: 4
根据文档的说明:
>模式不能包含'.'、'..'或空路径元素,也不能以斜杠开头或结尾。
所以你正在尝试的方法不被直接支持。更多信息可以在此问题的评论中找到。
你可以做的一件事是在dir2
中放置一个go文件,在其中嵌入file.txt
,然后在dir1/file.go
中导入/使用它(假设这些文件夹在同一个包中)。
英文:
The documentation states:
>Patterns may not contain ‘.’ or ‘..’ or empty path elements, nor may they begin or end with a slash.
So what you are trying to do is not supported directly. Further information is available in the comments on this issue.
One thing you can do is to put a go file in dir2
, embed file.txt
in that and then import/use that in dir1/file.go
(assuming the folders are in the same package).
答案2
得分: 1
这在embed包中是不支持的,正如@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[] // 嵌入单个文件
//go:embed icons/*
var icons embed.FS // 嵌入整个目录
也有一些库可以帮助处理这个问题,比如这里列出的https://github.com/avelino/awesome-go#resource-embedding
但我还没有遇到过使用普通的embed无法满足我的需求的情况。
英文:
This is not supported in the embed package as stated by @Brits (https://pkg.go.dev/embed)
A pattern I like to use is to create an resources.go file in my project's internal
package and put all my embedded resources in there eg:
├── 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
There are libraries that can help with this as well such as those listed here https://github.com/avelino/awesome-go#resource-embedding
But I've not run into a use case where plain old embed wasn't enough for my needs.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论