问:go-jira:切片未在模板中切片字符串

问题描述

我尝试使用以下模板行从“ 2020-03-09T08:09:40.000 + 0000”获取日期(2020-03-09):

... [Ticket:{{- .key -}}:{{ .fields.resolution.name }}] starts {{ slice .fields.created 0 10 }} and ends {{ slice .fields.resolutiondate 0 10 }} ...

->无效用法:模板:gojira:7:62:在处执行“ gojira”:调用slice时出错:list应该是slice或数组的类型,但是字符串

文档说:

切片
slice返回将第一个参数切片后的结果 剩下的论点。因此,按照Go语法,“切片x 1 2”为x [1:2], 而“切片x”是x [:],“切片x 1”是x [1:]和“切片x 1 2 3” 是x [1:2:3]。第一个参数必须是字符串,切片或数组。

这是我与go-jira一起使用的完整模板:

@startgantt
{{ range .issues -}} 
[Ticket:{{- .key -}}:{{ .fields.resolution.name }}] starts {{ slice .fields.created 0 10  }} and ends {{ slice .fields.resolutiondate 0 10 }}
[Ticket:{{- .key -}}:{{ .fields.resolution.name }}] is colored Yellow
{{ if (and .fields.customfield_11202 .fields.customfield_11203) -}}
[Planned:{{- .key -}}:{{ .fields.resolution.name }}] starts {{ .fields.customfield_11202 }} and ends {{ .fields.customfield_11203 }}
[Planned:{{- .key -}}:{{ .fields.resolution.name }}] is colored LightBlue
{{ end -}}
{{ end -}}
@endgantt

解决方法

我认为您不希望在.fields.created周围加上引号,因为您将以该字符串结尾,而不是所需的日期,因此需要解决此问题,但不应引起此错误。

这个完整的模板(进行了一些小的更改)至少在最新版本中有效:

https://play.golang.org/p/fkK8DKyj9jy

t := template.Must(template.New("").Parse(`[Ticket:{{- .key -}}:{{ .fields.resolutionname }}] starts {{ slice .fields.created 0 10 }} and ends {{ slice .fields.resolutiondate 0 10 }} `))
data := map[string]interface{}{
    "key":"key","fields":map[string]string{"created":"2020-03-09T08:09:40.000+0000","resolutionname":"name","resolutiondate":"2020-03-09T08:09:40.000+0000"},}

err := t.Execute(os.Stdout,data)

您使用哪个库输出此模板,我假设使用文本/模板?

slice函数的引入是相对较新的,但是无论如何它都不会产生该错误。您确定尚未在功能映射中重新定义切片吗?这似乎是最可能的解释,因为slice函数在任何情况下都不会给出您引用的错误。

您可以单独使用一个字符串对切片函数进行简单测试吗,例如上面的play.golang.org链接,但是要使用模板?

,

Go 1.13中添加了slice函数,因此,如果您按照注释中的说明使用Go 1.10.4,则解析引擎不知道此函数。 Go-jira可能会添加一个具有该名称的函数,但是可能不支持切片字符串。

最好是升级到Go 1.13或更高版本,并且此slice函数将准备好对您的字符串进行切片,如以下示例所示:

t := template.Must(template.New("").Parse(`{{slice . 1 3}}`))
if err := t.Execute(os.Stdout,"012345"); err != nil {
    panic(err)
}

哪个输出(在Go Playground上尝试):

12

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...