gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:42:56 27 4
gpt4 key购买 nike

作品:

{{ $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>

当然,如果变量已经存在,你应该使用 = 赋值,因为 := 将创建一个新变量,如果发生在另一个 block 中(例如 {{range}}{{if}}),更改后的值将不会保留在 block 之外。

真正的问题是函数调用语法:

{{ $temp := $temp.AddDate(0,-1,0) }}

在 Go 模板中你不能使用普通的调用语法,你只需要枚举参数,用空格分隔,例如:

{{ $temp = $temp.AddDate 0 -1 0 }}

Template.Execute() 返回的错误表明这一点:

panic: template: :3: unexpected "(" in operand

详情请见 template/Pipelines :

A command is a simple value (argument) or a function or method call, possibly with multiple arguments:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com