如何根据 属性 渲染正确的 css class?

How to render the correct css class based on a property?

我的模板目前是这样的:

{{range .Users}}
<div ...>
   <div class="row XXXX">
</div>
{{end}}

必须将 XXX 替换为基于 User 结构的 属性 的 css-class,UserLevel 是一个字符串。

所以根据UserLevel的值,我会显示正确的css class:

UserLevel是"beg"那么我需要输出"beginner"。 UserLevel 是 "int" 那么我需要输出 "intermediate" 等等

我知道我可以重命名 css class 以匹配 属性 的值,但我不想在 2.

由于 if 语句中不允许使用表达式,是否可以以某种方式执行此操作?

有几种方法可以做到这一点,我将介绍两种。第一种方法是在模板中使用 if 语句和相等性测试:

{{range $count, $user := .Users}}
<div ...>
   <div class="row {{if eq $user.UserLevel "beg"}}beginner{{else if eq $user.UserLevel "int" }}intermediate{{else}}default{{end}}">
</div>
{{end}}

第二种方式是为User定义一个函数,根据UserLevel属性:

输出正确的class
func (u User) CssClass() string {
    switch u.UserLevel {
    case "beg":
        return "beginner"
    case "int":
        return "intermediate"
    default:
        return ""
    }
}

{{range $count, $user := .Users}}
<div ...>
   <div class="row {{$user.CssClass}}">
</div>
{{end}}

我把这个小测试代码放在 Go playground 中,两者都产生相同的输出并正确 class。