为了账号安全,请及时绑定邮箱和手机立即绑定

无法在没有解析错误的情况下在 Google go 中添加时间

无法在没有解析错误的情况下在 Google go 中添加时间

Go
墨色风雨 2023-06-01 15:07:53
作品:{{ $temp := timestampToDate $var.date }} {{ $temp.Format 2006/01/02 }}不起作用{{ $temp := timestampToDate $var.date }} {{ $temp := $temp.AddDate(0,-1,0) }}     {{ $temp.Format 2006/01/02 }}它说它无法用第二行解析文件,但问题是什么?据我所知,我正在正确使用命令。
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

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

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}}or {{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>


查看完整回答
反对 回复 2023-06-01
  • 1 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信