golang模板可以通过内置函数template复用模板,但是template只能自顶层而下层加载,而且每一层的数据只能从上层向下层传递,这也使得一个常规的导航栏、菜单栏、内容栏、页脚布局,在设计数据的时候,就需要设计能容纳这些内容的顶层数据结构,当然,也可以直接使用map封装各个组件的数据,但是一是数据总是需要在一个地方进行归集,其次,如果前端页面组件的层数太多,也会使得数据结构变得异常复杂。因此,内置函数template就不能作为主要的组件复用机制。
得益React的设计,这对于解决template机制带来的问题提供了很好思路。通常在单一的页面组件范围内,有自身的数据范围,在React中,一个React组件,内部有组件本身的变量、方法和渲染模板,外部的变量和方法通过props传入,而组件和组件之间的调用,则是通过slot机制,将组件之间组合。基于此,使用golang定义如下结构。
- Render结构,负责模板文件的渲染、slot插槽、传递初始化数据和初始化函数,还需要维护一些全局方法和变量的注入工作。对外只提供渲染函数。
- Slot结构,用于实现插槽功能,同时提供与template类似的slot函数功能。
有了上面两个结构,golang模板就能实现极大的自由度了。
由于golang的html模板会自动转义所有的html字符,因此,由Render结构输出的html字串,将始终认为是安全的template.HTML类型。这使得通过slot插槽渲染render输出的html时,不会将html字串进行转义。
DISCUSSION
评论
还没有公开评论,欢迎留下想法。