如何访问 Go 模板中的子字符串 (s[:2])?
How do I access substrings (s[:2]) in Go templates?
类似于
如何在 Go 模板中直接访问子字符串(例如 s[:2])?
每当我这样做时,我都会得到“坏字符 U+005B '['”
{{ .s[:2] }}
您也可以在 string
上使用 slice
模板函数(它是在 Go 1.13 中添加的):
slice
slice returns the result of slicing its first argument by the
remaining arguments. Thus "slice x 1 2" is, in Go syntax, x[1:2],
while "slice x" is x[:], "slice x 1" is x[1:], and "slice x 1 2 3"
is x[1:2:3]. The first argument must be a string, slice, or array.
例如:
t := template.Must(template.New("").Parse(`{{ slice . 0 2 }}`))
if err := t.Execute(os.Stdout, "abcdef"); err != nil {
panic(err)
}
这将输出(在 Go Playground 上尝试):
ab
不要忘记 Go 字符串存储 UTF-8 编码的字节序列,索引和切片字符串使用字节索引(而不是 rune
索引)。当字符串包含多字节符文时,这很重要,如本例所示:
t := template.Must(template.New("").Parse(`{{ slice . 0 3 }}`))
if err := t.Execute(os.Stdout, "世界"); err != nil {
panic(err)
}
这将输出单个 rune
(在 Go Playground 上尝试):
世
类似于
如何在 Go 模板中直接访问子字符串(例如 s[:2])?
每当我这样做时,我都会得到“坏字符 U+005B '['”
{{ .s[:2] }}
您也可以在 string
上使用 slice
模板函数(它是在 Go 1.13 中添加的):
slice slice returns the result of slicing its first argument by the remaining arguments. Thus "slice x 1 2" is, in Go syntax, x[1:2], while "slice x" is x[:], "slice x 1" is x[1:], and "slice x 1 2 3" is x[1:2:3]. The first argument must be a string, slice, or array.
例如:
t := template.Must(template.New("").Parse(`{{ slice . 0 2 }}`))
if err := t.Execute(os.Stdout, "abcdef"); err != nil {
panic(err)
}
这将输出(在 Go Playground 上尝试):
ab
不要忘记 Go 字符串存储 UTF-8 编码的字节序列,索引和切片字符串使用字节索引(而不是 rune
索引)。当字符串包含多字节符文时,这很重要,如本例所示:
t := template.Must(template.New("").Parse(`{{ slice . 0 3 }}`))
if err := t.Execute(os.Stdout, "世界"); err != nil {
panic(err)
}
这将输出单个 rune
(在 Go Playground 上尝试):
世