Go中相对路径嵌入文件报错,子模块嵌入资源最佳实践咨询
Go子模块嵌入资源的问题解决与最佳实践
错误原因
Go的//go:embed指令不允许使用包含../的路径模式,这类向上跳转的路径不符合嵌入语法规则,因此会触发pattern ../CHANGELOG.md: invalid pattern syntax错误。
最佳实践
1. 建立共享资源包
这是多模块共享资源的通用方案:
- 在模块根目录创建专门的资源包(比如命名为
assets),在该包的源文件中嵌入模块根目录下的目标资源。 - 示例项目结构:
assets.go lib/ util.go CHANGELOG.md assets.go代码:package assets //go:embed CHANGELOG.md var Changelog string- 在
lib/util.go中导入assets包,直接通过assets.Changelog访问嵌入的CHANGELOG内容。
2. 调整资源文件位置
如果CHANGELOG仅供lib模块使用,可将CHANGELOG.md移动到lib/目录下,在util.go中直接嵌入:
//go:embed CHANGELOG.md var changelog string
3. 使用模块级资源目录
若项目有多个共享资源,可在模块根目录创建resources/统一存放:
- 示例结构:
resources/ CHANGELOG.md assets.go lib/ util.go assets.go代码:package assets //go:embed resources/CHANGELOG.md var Changelog string- 在
lib/util.go中导入assets包即可访问资源。
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

