猿问

无法使用 Go 的“文本/模板”库导入变量

我有以下模板文件:


// main.tmpl

This is the main.                // line 1

{{ template "myFunc" }}          // line 2

{{- $name }}       // line 3

// helper.tmpl

This is a helper

{{- $name := "Nick" -}}


{{- define "myFunc" -}}

  Hello

{{- end -}}

在围棋游乐场;


package main


import (

  "text/template"

  "io/ioutil"

  "fmt"

  "bytes"


)


func main() {

    files := []string{"helper.tmpl", "main.tmpl"}

    t := template.New(files[0]).Funcs(make(map[string]interface{}))


    // Read the contents of each file, and parse it.

    // Couldn't get template.ParseFiles working, kept getting

    // "incomplete or empty template" errors.

    for _, file := range files {

        f, err := ioutil.ReadFile(file)

        if err != nil {

            fmt.Println(err.Error())

        }

        t.Parse(string(f))

        if err != nil {

            fmt.Println(err.Error())

        }

    }


    var buf bytes.Buffer

    err := t.Execute(&buf, make(map[string]string))

    if err != nil {

        fmt.Println(err.Error())

    }

    fmt.Println(buf.String())

}


当我运行我的主,保持原样,输出是:main.tmpl


This is a helper.

但是,当我在 中删除 中的第 3 行后运行 main 时,输出为:main.tmpl


This is the main.

Hello

问:为什么从 中调用变量会导致覆盖 ,而执行忽略其余部分?缓冲区似乎被覆盖了。这是一个错误吗?helper.tmplThis is the main.main.tmpl


提前致谢。


慕运维8079593
浏览 120回答 1
1回答

拉丁的传说

https://golang.org/pkg/text/template/#hdr-Variables变量的作用域扩展到声明变量的控制结构的“结束”操作(“if”、“with”或“range”),或者扩展到模板的末尾(如果没有此类控制结构)。模板调用不会从其调用点继承变量。
随时随地看视频慕课网APP

相关分类

Go
我要回答