我将一个结构传递给一个模板,该模板有时包含一些太长而无法显示的字符串。在任何其他语言中,我只是在模板本身附加了一个格式规则。在模板中完成格式化的惯用方法是什么?
示例:
type struct MyStruct{
something string
anotherThing string
}
在模板中
<table>
{{ range .Rows }} //NOTE! Rows is an array of MyStruct objects
<tr>
<td>{{ .something }}</td>
<td>{{ .anotherThing }}</td>
</tr>
{{ end }}
</table>
如果从上面不明显的话,问题是“你怎么去确定。另一个或者。某些东西不会显示超过40个字符?”
一个解决方案可能是使结构包含四个值,两个原始字符串和两个格式化版本,即在.go文件中进行格式化,然后始终在悬停或类似的工具提示中显示原始字符串这一点。
答案 0 :(得分:7)
您可以向FuncMap添加自定义截断功能。有人在操场上发布example,它将模板变量转换为大写,如下所示:
{{ .Name | ToUpper }}
编辑。将以上代码调整为基本Truncate
过滤器:http://play.golang.org/p/e0eaf-fyrH
{{ .Name | Truncate }}
如果您想将参数传递给Truncate
,您也可以这样写:
{{ Truncate .Name 3 }}
答案 1 :(得分:1)
除了使用自定义函数之外,还有一种方法是使用Stringer
接口定义您自己的类型:
type ShortString string
func(ss ShortString) String() string {
if len(ss) > 10 {
return string(ss[:5]) + "..."
}
return string(ss)
}
type MyStruct struct {
Something ShortString
}
playground显示两种方法。