如何在go模板中包含不同文件夹中的文件

How to include file which in different folder in go templates

例如文件夹 A 中有 test.tpl:

{{define "test"}} hello I am test {{end}}

文件夹 B 中的另一个 index.tpl:

{{template "A/test"}} or {{template "test"}}

两者都不行。

使用template.ParseFiles 并解析所有 模板。为每个使用不同的名称。这个目录布局

.
├── A
│   └── index-A.tpl
├── B
│   └── index-B.tpl
└── main.go

A/index-A.tpl

A

B/index-B.tpl包含

B1
{{template "index-A.tpl"}}
B2

此代码使用

package main

import (
        "os"
        "text/template"
)

func main() {
        t, err := template.ParseFiles("B/index-B.tpl", "A/index-A.tpl")
        if err != nil {
                panic(err)
        }
        err = t.Execute(os.Stdout, nil)
        if err != nil {
                panic(err)
        }
}

将产生此输出:

B1
A    
B2

请注意,两个 模板都在 templateParseFiles 中命名,并且 B/index-B.tpl 通过名称 引用 index-a.tpl 而没有路径.