
本文介绍如何利用 Go 模板的 or 和 and 函数组合,一行内实现 HTML 属性(如 class)的条件动态拼接,避免冗长的 {{ if }}...{{ else }} 结构,提升模板可读性与维护性。
本文介绍如何利用 go 模板的 `or` 和 `and` 函数组合,一行内实现 html 属性(如 `class`)的条件动态拼接,避免冗长的 `{{ if }}...{{ else }}` 结构,提升模板可读性与维护性。
在 Go 的 html/template 中,频繁使用 {{ if }}...{{ else }} 块来控制 HTML 属性(尤其是 class)的条件渲染,不仅使模板臃肿,还容易因缩进和换行破坏语义清晰性。更优雅的解法是借助模板内置函数 and 与 or 的短路求值特性,实现“条件为真时返回指定字符串,否则返回空字符串(即 nil 效果)”——这正是 or 函数的核心能力:它按顺序求值参数,返回第一个非空(truthy)值;而 and 可用于组合多个条件。
上述场景中,目标是:当 .var1 == "val123" 时,在 class 列表前追加 "active",否则不添加任何内容(即等效于 nil)。以下是一行式写法:
<button class="{{ or (and (eq .var1 " val123 class1 class2 class3 class4 class5 class6>
test
</button>
✅ 原理说明:
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- (eq .var1 "val123") 返回布尔值;
- (and ... "active") 仅在前面条件为 true 时返回 "active",否则返回 false(空值);
- or 接收该结果:若为 "active" 则原样输出;若为 false/nil,则继续检查后续参数——但此处 or 后无其他参数,因此最终输出为空字符串(Go 模板中空字符串等价于未设置该部分,不会产生多余空格)。
⚠️ 注意事项:
- or 的返回值始终是其首个非空参数,因此确保 and 的最后一个参数是期望插入的字符串(如 "active"),而非布尔值;
- 模板中不会自动去除首尾空格,因此 "active" 前需手动加空格(如 " active"),或统一将固定 class 写在 or 表达式之后(如示例),由空格自然分隔;
- 若需支持多条件激活(如 active + disabled),可嵌套 and 或链式 or,例如:
class="{{ or (and (eq .state "active") "active") (and (eq .state "disabled") "disabled") }} class1 class2" - 此方法仅适用于字符串拼接类属性(如 class, data-*, aria-*),不适用于布尔属性(如 disabled 应直接用 {{ if }}disabled{{ end }})。
总结而言,善用 and/or 组合,不仅能将多行条件逻辑压缩为单行表达式,还能让模板更接近声明式风格——逻辑内聚、视觉简洁、易于复用。在构建组件化模板(如按钮、卡片、表单项)时,这种技巧尤为实用。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










