GO 的 Web 开发系列(八)—— Gin 自定义 Html 渲染实现多租户的模板设计

这篇具有很好参考价值的文章主要介绍了GO 的 Web 开发系列(八)—— Gin 自定义 Html 渲染实现多租户的模板设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文主要解决在多租户场景下的模板渲染问题。

正常情况下 Gin 配置的所有模板都属于同一个模板组合,相同名称的模板将相互覆盖。在未通过 define 指定模板名称时,同名模板文件也将相互覆盖。自定义函数中也无法区分租户,这将非常不方便我们进行多租户的模板渲染处理。通过自定义 HTML 渲染器,将一一解决这些问题。

一、Gin 源码分析

Gin 通过 router.LoadHTMLGlobrouter.LoadHTMLFiles 函数初始化 HTML 模板,这两个函数的源码如下。

// LoadHTMLGlob loads HTML files identified by glob pattern
// and associates the result with HTML renderer.
func (engine *Engine) LoadHTMLGlob(pattern string) {
   
	left := engine.delims.Left
	right := engine.delims.Right
    // 初始化模板
	templ := template.Must(template.New("").Delims(left, right).Funcs(engine.FuncMap).ParseGlob(pattern))

	if IsDebugging() {
   
		debugPrintLoadTemplate(templ)
		engine.HTMLRender = render.HTMLDebug{
   Glob: pattern, FuncMap: engine.FuncMap, Delims: engine.delims}
		return
	}

	engine.SetHTMLTemplate(templ)
}

// LoadHTMLFiles loads a slice of HTML files
// and associates the result with HTML renderer.
func (engine *Engine) LoadHTMLFiles(files ...string) {
   
	if IsDebugging() {
   
		engine.HTMLRender = render.HTMLDebug{
   Files: files, FuncMap: engine.FuncMap, Delims: engine.delims}
		return
	}
    // 初始化模板
	templ := template.Must(template.New("").Delims(engine.delims.Left, engine.delims.Right).Funcs(engine.FuncMap).ParseFiles(files...))
	engine.SetHTMLTemplate(templ)
}

可以看到,这里面区分了 DEBUG 模式,DEBUG 模式的渲染器是 render.HTMLDebug,他将在每次渲染是重新创建模板,从而使模板修改能够实时生效。

DEBUG 渲染器:

HTMLDebug 渲染器与生产渲染器没有本质不同,只是将创建 template 模板的步骤放在了执行渲染时。执行渲染的接口源码如下:文章来源地址https://www.toymoban.com/news/detail-855635.html

// Instance (HTMLDebug) returns an HTML instance which it realizes Render interface.
func (r HTMLDebug) Instance(name string, data any) Render {
   
   return HTML{
   
      // 重新创建模板
      Template: r.loadTemplate()

到了这里,关于GO 的 Web 开发系列(八)—— Gin 自定义 Html 渲染实现多租户的模板设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go语言web框架——Gin

    Gin是一个go语言写的Web框架 客户机通过TCP/IP协议建立到服务器的TCP连接 客户端向服务器发送HTTP协议请求 Request GET /url ,请求服务器里的资源文档 服务器向客户机发送HTTP协议应答Response,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理

    2023年04月14日
    浏览(81)
  • GO 的 Web 开发系列(一)—— Java 与 Go 做 Web 程序的区别

    小玖是奋斗一线的 Java 开发,准备自己开发一个建站程序,出于某些原因,小玖最终将建站程序的开发语言选择了 Go。 对于 Go 小玖其实之前并没有太多接触过,也只能算是个初学者吧,所以对 Go 的 WEB 开发从初学的角度总结经验,希望日后能对初学 Go 语言的小伙伴有所帮助

    2024年01月22日
    浏览(44)
  • Go语言Web框架Gin常见用法

    Gin是目前Go语言最为常用的Web框架,日常工作中也少不了使用此框架,编写此使用总结文档以备后用。 此文档参考官方文档编写,仅用于自我学习总结和参考。 我一直认为编写文档的意义一方面是给其他人提供了些许帮助,另一方面则是让自己加深了对知识的理解并为自己提

    2024年02月03日
    浏览(55)
  • 基于go语言gin框架的web项目骨架

    节省时间与精力,更高效地打造稳定可靠的Web项目:基于Go语言和Gin框架的完善Web项目骨架。无需从零开始,直接利用这个骨架,快速搭建一个功能齐全、性能优异的Web应用。充分发挥Go语言和Gin框架的优势,轻松处理高并发、大流量的请求。构建可扩展性强、易于维护的代码

    2024年02月08日
    浏览(47)
  • GO 的 Web 开发系列(二)—— Web 项目的技术框架选择和项目搭建

    Web 系统搭建第一步,选择技术框架,完成 Hello World 。 小玖用的 Go 版本是 1.21.6 介绍项目的技术选型个结构,不包括代码。 全文链接:https://blog.nineya.com/archives/149.html Web 框架: github.com/gin-gonic/gin v1.9.1 调研了 Go 开发者一圈,给小玖推荐这个框架的人最多 :tushe: 主要优点是轻

    2024年01月25日
    浏览(54)
  • 初始化一个Gin框架的Go-Web项目

    使用到的第三方库 gin Gin 框架 viper 配置文件管理 cors 跨域资源请求配置 gorm ORM 库 zap 日志记录 Go 语言程序的入口点 main.go 文件 使用 flag 读取配置文件路径参数,默认当前目录下 使用 viper 读取 config.ini 配置文件初始化初始数据 初始化随机数种子 初始化数据库 声明启动程序

    2024年02月09日
    浏览(55)
  • go web框架 gin-gonic源码解读03————middleware

    今天打完游戏有空整理整理之前看的gin的中间件设计,go的中间件设计相较于前两站还是蛮简单,蛮容易看懂的,所以顺便把context也一起写一下。 中间件是现在web服务里统一化拓展最常用的功能,,他是为了在我们的web服务中实现一些可重复使用,可组合的功能方法、可以让

    2024年02月11日
    浏览(38)
  • go web框架 gin-gonic源码解读01————Engine

    gin-gonic是go语言开发的轻量级web框架,性能优异,代码简洁,功能强大。有很多值得学习的地方,最近准备把这段时间学习gin的知识点,通过engine,context,router,middleware几篇博客文章总结总结。 而Engine是gin框架最核心的结构体。 为什么gin需要设计一个 Engine 结构体? 因为gi

    2024年02月14日
    浏览(39)
  • go web框架 gin-gonic源码解读02————router

    本来想先写context,但是发现context能简单讲讲的东西不多,就准备直接和router合在一起讲好了 router是web服务的路由,是指讲来自客户端的http请求与服务器端的处理逻辑或者资源相映射的机制。(这里简单说说,详细的定义网上都可以查到) 那一个优秀的web router应该提供以下

    2024年02月12日
    浏览(43)
  • Go Gin Gorm Casbin权限管理实现 - 3. 实现Gin鉴权中间件

    Casbin是用于Golang项目的功能强大且高效的开源访问控制库。 强大通用也意味着概念和配置较多,具体到实际应用(以Gin Web框架开发)需要解决以下问题: 权限配置的存储,以及 增删改查 Gin框架的中间件如何实现 经过一番摸索实践出经验,计划分为三个章节,循序渐进的介绍

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包