gpt4 book ai didi

file - Golang 无法在外部包中看到模板

转载 作者:IT王子 更新时间:2023-10-29 01:43:10 25 4
gpt4 key购买 nike

我正在尝试用 Go 编写一个可重用的包。我使用的结构类似于 here 中描述的结构但略有不同:

/src/bitbucket.org/EXTERNAL_PROJECT_NAME/EXTERNAL_PACKAGE_NAME/...
/src/INTERNAL_PROJECT_NAME/INTERNAL_PACKAGE_NAME/...

或者第二行应该是:

/src/bitbucket.org/INTERNAL_PROJECT_NAME/INTERNAL_PACKAGE_NAME/...

一切正常,直到我需要访问外部包中存在的非 go 文件。例如,我有一些内置模板,我希望无需将它们包含在我的内部项目模板目录中即可使用。

为此,我在外部项目中有一个“templates”目录,我想在其中放置一些内置模板,在我的内部项目中有一个“templates”目录,自定义模板将放在其中。但是当我试图从外部项目模板目录中解析模板时,它找不到它们。

那么我该如何指示我想从外部包目录而不是内部包目录中获取模板呢?我可以将路径调整为如下所示:

../../bitbucket.org/EXTERNAL_PROJECT_NAME/EXTERNAL_PACKAGE_NAME/templates/file.html

但这显然非常笨拙并且取决于个人设置,所以这是行不通的。一般来说,如果我想引用外部包中的文件而不是我的内部项目目录,我该如何优雅地执行此操作?

谢谢!

最佳答案

原来有一个非常简单的解决方案。看起来像下面这样:

package main

import (
"bitbucket.org/EXTERNAL_PROJECT/EXTERNAL_PACKAGE"
"go/build"
)

func main() {
SrcRoot := "/src"
PackageDir := "/bitbucket.org/EXTERNAL_PROJECT/EXTERNAL_PACKAGE"
InternalTemplateDir := build.Default.GOPATH + SrcRoot + PackageDir + "/templates/"
}

GOROOT 在这里为我们提供了包含所有 go 代码的目录的路径。从那里,我想引用包源中的模板目录。通过 InternalTemplateDir,我现在有了在外部包中引用模板的基本路径。

为了便于使用,我可能会构建一个模板加载器,它首先检查内部文件路径上的文件,然后检查外部包中的相同文件,以便可以通过在内部包含它来覆盖任何给定的模板,但基本模板也都具有内置版本。

关于file - Golang 无法在外部包中看到模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25086489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com