2014-09-24 60 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