Skip to content

中文文档

Xuanzi edited this page Jul 8, 2021 · 3 revisions

FET

FET是Friendly, Easily, Template这三个单词的首字母,寓意友好、简单的模板引擎。

FET解决了什么问题

FET本身不算一个模板引擎,因为目前的代码都会编译成go官方库html/template代码。 这样做的原因有三个:

  1. 原始的html/template模板在代码层面已经对一个模板引擎该有的功能有了足够多的支持
  2. 毕竟是官方出品,使用受众比较广泛,这样对于本身使用html/template模板的用户只需在模板层做代码改动,就可以渐进式地逐步替换go原生模板为fet模板
  3. 少一点工作量,偷个懒

当然,这并不代表FET只是做了简单的翻译工作,实际上它缺少的只是generate部分将模板代码转译成go代码而不是go原生模板代码,模板引擎需要做的前期分析处理部分都已经完成了。在有足够需要的情况下,完全可以处理成自己的模板引擎代码,尽管这也是个很费力气的事情。

FET的模板语法

熟悉php smarty模板语法的同学,应该不需要额外的学习成本,因为默认smarty模式就是按smarty的语法来书写的,这表示:

  1. 如果你的项目使用php+smarty要迁移到go,如果不是用到特别高级的功能的情况下,模板的迁移成本会要小很多
  2. 在你的编辑器里如vscode可以使用smarty的语法高亮插件来对代码进行高亮

所有这些都将增强模板的书写体验,相信大部分写过html/template模板代码的人,都有这样的体验:原始、不直观、如行动时手脚被缚,这种不爽的体验就是开发fet的原动力。

具体语法

  • Extends

    {%extends "base.tpl"%} 和smarty一样,extends必须放在开头,前面只能有fet的注释节点或者文本节点

  • Include

    {%include "inc.tpl" show=true%} 支持添加属性变量

  • Block

    {%block "content"%}{%/block%} 继承时block替换区块

  • Capture
    {%capture "name"%}{%/capture%} 捕获,和smarty一样,注意:不支持assign\append等其它参数

  • Foreach

    {%foreach $list as $item%}{%/foreach%}{%foreach $list as $key => $item%}{%/foreach%} foreach循环

  • For

    {%for $i = 0, $j = count($list); $i < $j; $i++%}{%/for%} for循环,注意,for循环和foreach都不支持break/continue关键字

  • Variable

    {%$title = "你好,china!"%}

  • Output

    {%$title%}

  • Pipe

    {%$title|truncate:2%}

  • Static variables

    $fet 相当于. $fet.now 当前unix时间戳 $fet.capture.xxx 定义的capture $fet.config.xxx fet的配置信息

Clone this wiki locally