作品:

{{ $temp := timestampToDate $var.date }}
{{ $temp.Format 2006/01/02 }}

不起作用
{{ $temp := timestampToDate $var.date }}
{{ $temp := $temp.AddDate(0,-1,0) }}
{{ $temp.Format 2006/01/02 }}

它说它不能用第二行来解析文件,但是出了什么问题呢?据我所知,我正在正确使用该命令。

最佳答案

乍一看,问题似乎是由于在已存在的变量上使用:=语法引起的,但这不是问题,如以下示例所示:

t := template.Must(template.New("").Parse(`{{$temp := "aa"}}{{$temp}}
{{$temp := "bb"}}{{$temp}}`))

fmt.Println(t.Execute(os.Stdout, nil))
哪个输出(在Go Playground上尝试):
aa
bb<nil>
但是当然,如​​果变量已经存在,则应使用=赋值,因为:=将创建一个新变量,如果该变量发生在另一个块内(例如{{range}}{{if}}),则更改后的值将不会保留在该块外。
真正的问题是函数调用语法:
{{ $temp := $temp.AddDate(0,-1,0) }}
在Go模板中,您不能使用常规的调用语法,而只需枚举用空格分隔的参数,例如:
{{ $temp = $temp.AddDate 0 -1 0 }}
Template.Execute() 返回的错误表明:
panic: template: :3: unexpected "(" in operand
这在 template/Pipelines 中有详细说明:

命令是一个简单的值(参数)或函数或方法调用,可能带有多个参数:
Argument
     The result is the value of evaluating the argument.
.Method [Argument...]
     The method can be alone or the last element of a chain but,
     unlike methods in the middle of a chain, it can take arguments.
     The result is the value of calling the method with the
     arguments:
         dot.Method(Argument1, etc.)
functionName [Argument...]
     The result is the value of calling the function associated
     with the name:
         function(Argument1, etc.)
     Functions and function names are described below.

例:
t := template.Must(template.New("").Funcs(template.FuncMap{
    "now": time.Now,
}).Parse(`{{$temp := now}}
{{$temp}}
{{$temp = $temp.AddDate 0 -1 0}}
{{$temp}}`))

fmt.Println(t.Execute(os.Stdout, nil))
输出(在Go Playground上尝试):
2009-11-10 23:00:00 &#43;0000 UTC m=&#43;0.000000001

2009-10-10 23:00:00 &#43;0000 UTC<nil>

关于go - 无法在Google Go中添加最新日期而没有解析错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54182019/

10-15 21:51