我的golang 码 arch 是这样的:

├── embeded.go
├── go.mod
├── json
│   └── file
└── main.go

这是我的Embede.Go代码:

package main

import "embed"

//go:embed json/*
var templatesFS embed.FS

func TemplatesFS() embed.FS {
    return templatesFS
}

现在在我的Main.go中,我无法访问json目录中的文件:

package main

import (
    "fmt"
    "log"
    "os"
    "text/template"
)

func main() {
    tmpl := template.Must(
        template.New("json/file").
            ParseFS(TemplatesFS(), "json/file"))
    if err := tmpl.Execute(os.Stdout, "config"); err != nil {
        log.Fatal(err)
    }
}

当我在代码之上运行时,我得到错误template: json/file: "json/file" is an incomplete or empty template

但我可以像这样访问file:

file, err := TemplatesFS().ReadFile("json/file")

那么为什么我不能在templte.ecute中访问它呢?

我怎么才能解决它呢?

推荐答案

模板解析器成功地从嵌入式文件系统中读取模板.

Execute方法报告模板tmpl不完整.将变量tmpl设置为通过调用New创建的模板.模板不完整,因为应用程序没有解析具有模板名称json/file的模板.

ParseFS使用文件的基本名称命名模板.通过在对New的调用中使用文件的基名称进行修复.

tmpl := template.Must(
    template.New("file").ParseFS(TemplatesFS(), "json/file"))     

Go相关问答推荐

获取k8s群集作用域运算符的命名空间

GORM Find方法中缺少字段

租户GUID X的租户不存在self 邮箱帐户的租户(我是唯一的成员)

如何在 zap 记录器库中使用自定义时间函数

无法读取postman 中的表单数据

在 go 中,将接收器 struct 从值更改为指针是否向后兼容?

是否需要手动调用rand.Seed?

在本地 go 应用程序上获取秘密的正确策略

你如何在 Golang 代码中测试 filepath.Abs​​ 失败?

如何使用 go-git 将特定分支推送到远程

Golang:如何判断通过缓冲通道进行通信时生产者或消费者是否较慢?

Go:从 ssl 证书中获取 'subject/unstructeredName' 的值

如何使用 fyne Go 使用 canvas.NewText() 使文本可滚动

处理程序后访问 HTTP 请求上下文

此代码如何生成内存对齐切片?

没有堆栈跟踪的 go 程序崩溃是什么意思?

在 Golang 中获取谷歌云服务帐户的访问令牌?

如何正确判断 io.Reader 是否为零?

golangci-lint 的 GitHub 操作失败,无法加载 fmt

如何在 Prometheus 中正确检测区域和环境信息?