2014-09-24 64 views
2

如何使用text/template包对模板中的字符串进行切片?当然,像{{ $myString[0:5] }}这样的东西不起作用。Go模板中的切片字符串

+0

我不确定你可以。那就说..你真的想要吗?如果切片操作发生在代码而不是模板中会更好。 – 2014-09-24 10:26:12

+0

我正在使用预先构建的go软件包,所以我无法编写自定义函数而无需自己构建软件包。我不想那样做。 – theG33k 2014-09-24 10:31:48

回答

6

template.Funcs定义您自己的切片功能。

代码:

t.Funcs(template.FuncMap{ 
    "stringSlice": func(s string, i, j int) string { 
     return s[i:j] 
    } 
}) 

模板:

{{ stringSlice .MyString 0 5 }} 

参见:Template and custom function; panic: function not defined

PS:由于@dyoo在评论正确地指出;这个最小的stringSlice函数不会阻止你将UTF-8字符分成两半。你应该在现场环境中处理它。

+1

但是要以尊重符文的方式来做到这一点。上面的代码将意味着utf-8编码的内容。 – dyoo 2014-09-26 21:57:50

+0

是的,这是一个最小的例子,它不处理UTF-8。我会在答案中注意到这一点。 – thwd 2014-09-26 22:08:47