首页 > 解决方案 > 问:go-jira:slice 没有对模板中的字符串进行切片

问题描述

我尝试使用此模板行从“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:在 <slice .fields.created 0 10> 处执行“gojira”:调用切片时出错:列表应该是切片或数组的类型,但应该是字符串

文档说:

slice
slice 返回将其第一个参数分割为剩余参数的结果。因此,“slice x 1 2”在 Go 语法中是 x[1:2],而“slice x”是 x[:],“slice x 1”是 x[1:],“slice 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

标签: stringgotemplatesjiraslice

解决方案


slice函数是在Go 1.13中添加的,因此如果您使用的是 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

推荐阅读