Go Gin 框架与 HTML 模板学习笔记

news2024/10/10 0:23:37

文章目录

      • 1. 简介
      • 2. 安装与项目结构
        • 项目结构:
      • 3. 基本使用
        • 3.1 创建基本的 HTTP 服务
        • 3.2 创建模板文件
        • 3.3 运行程序
      • 4. Gin 模板渲染详解
        • 4.1 传递数据
      • 5. 处理复杂数据结构
        • 5.1 传递切片数据
      • 6. 静态文件服务
      • 7. 模板的高级特性
        • 7.1 条件判断
        • 7.2 循环语句
        • 7.3 自定义模板函数
      • 8. 总结
      • 主要学习要点:

1. 简介

Gin 是 Go 语言中常用的高性能轻量级 HTTP Web 框架,适合快速开发 RESTful API 和 Web 应用。Gin 支持 HTML 模板渲染,基于 Go 标准库 html/template,提供了安全、高效的模板功能。本文主要介绍如何在 Gin 中使用 HTML 模板。


2. 安装与项目结构

首先,确保已安装 Go 语言环境,然后安装 Gin 框架:

go get -u github.com/gin-gonic/gin
项目结构:
go-gin-template/
    ├── main.go
    └── templates/
        └── index.html

3. 基本使用

3.1 创建基本的 HTTP 服务
package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default() // 创建Gin路由引擎

    // 加载模板文件夹中的所有HTML文件
    r.LoadHTMLGlob("templates/*")

    // 定义一个简单的处理器
    r.GET("/", func(c *gin.Context) {
        data := gin.H{
            "Title":   "Gin Template Example",
            "Message": "Welcome to Go Gin Templates!",
        }
        c.HTML(200, "index.html", data) // 渲染模板并输出到客户端
    })

    r.Run(":8080") // 启动HTTP服务
}
3.2 创建模板文件

templates 目录下创建一个 index.html 文件:

templates/index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{.Title}}</title>
</head>
<body>
    <h1>{{.Message}}</h1>
</body>
</html>
3.3 运行程序
go run main.go

浏览器访问 http://localhost:8080,你将看到页面渲染的内容。


4. Gin 模板渲染详解

  • LoadHTMLGlob(pattern string):使用文件匹配模式加载模板文件,支持批量加载,例如 r.LoadHTMLGlob("templates/*")

  • LoadHTMLFiles(filenames ...string):手动指定模板文件路径加载多个模板文件。

  • c.HTML(httpStatus int, name string, obj interface{}):渲染HTML模板,name 为模板文件名,obj 为传递的数据。

4.1 传递数据

Gin 提供 gin.H{}(类似于 map[string]interface{})来传递数据至模板:

data := gin.H{
    "Title":   "Page Title",
    "Message": "Hello, World!",
}

模板中使用 {{.Key}} 来引用数据:

<title>{{.Title}}</title>
<h1>{{.Message}}</h1>

5. 处理复杂数据结构

除了简单的数据类型,Gin模板支持传递数组、切片、结构体等复杂数据。

5.1 传递切片数据
r.GET("/list", func(c *gin.Context) {
    items := []string{"Item 1", "Item 2", "Item 3"}
    c.HTML(200, "list.html", gin.H{
        "Items": items,
    })
})

模板文件 list.html:

<ul>
    {{range .Items}}
    <li>{{.}}</li>
    {{end}}
</ul>

6. 静态文件服务

Gin 提供了处理静态文件的简单方法。可以通过 Static() 方法提供静态文件目录,比如 CSS、JS 或图片。

r.Static("/assets", "./assets")

这样,/assets 路径下的文件可以通过浏览器访问,例如 http://localhost:8080/assets/style.css


7. 模板的高级特性

html/template 是 Go 的标准库,提供了灵活的模板语法。常用特性如下:

7.1 条件判断
{{if .Condition}}
    <p>Condition is true</p>
{{else}}
    <p>Condition is false</p>
{{end}}
7.2 循环语句
<ul>
    {{range .Items}}
    <li>{{.}}</li>
    {{end}}
</ul>
7.3 自定义模板函数

Gin允许你为模板注册自定义函数,来格式化或处理数据。

r.SetFuncMap(template.FuncMap{
    "upper": strings.ToUpper, // 注册自定义函数
})

r.LoadHTMLGlob("templates/*")

在模板中使用自定义函数:

<p>{{upper .Message}}</p>

8. 总结

通过 Gin 框架,你可以高效地构建 Web 应用,同时借助 Go 语言的 html/template 来安全、灵活地渲染HTML页面。Gin 支持静态文件服务、复杂数据传递、自定义函数等高级功能,非常适合现代 Web 应用的开发。

主要学习要点:

  • Gin 路由与 HTML 模板集成:掌握如何使用 Gin 渲染 HTML 模板。
  • 模板语法:学习 html/template 的基本语法,如变量插值、条件判断、循环等。
  • 静态文件处理:理解 Gin 如何提供静态资源服务。
  • 自定义模板函数:能够扩展模板功能,适应项目的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2200500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

植物大战僵尸修改器-MFC

创建项目 创建mfc应用 基于对话框 打开资源视图下的 IDD_MFCAPPLICTION2_DIALOG 限制对话框大小 将属性中Border的值改为对话框外框 删除对话框中原有的控件 属性-外观-Caption 设置对话框标题 工具箱中拖放一个按钮 修改按钮名称 将按钮ID改为IDC_COURSE 在MFCApplication2…

django(二):定义第一个函数及url介绍

1.定义index函数 """ django里的第一个函数必须是request,不写会报错 """def index(request):return HttpResponse("Hello, world. Youre at the index of djangoProject.")注意&#xff01; ①.index函数里的形参必须为request ②.r…

STM32输入捕获模式详解(上篇):原理、测频法与测周法

1. 前言 在嵌入式系统的开发过程中&#xff0c;常常需要对外部信号进行精确的时间测量&#xff0c;如测量脉冲信号的周期、频率以及占空比等。STM32系列微控制器提供了丰富的定时器资源&#xff0c;其中的输入捕获&#xff08;Input Capture, IC&#xff09;模式能实现对信号的…

【测试】BUG篇——BUG

bug的概念 定义&#xff1a;⼀个计算机bug指在计算机程序中存在的⼀个错误(error)、缺陷(flaw)、疏忽(mistake)或者故障(fault)&#xff0c;这些bug使程序⽆法正确的运⾏。Bug产⽣于程序的源代码或者程序设计阶段的疏忽或者错误。 准确的来说&#xff1a; 当且仅当规格说明&am…

网站集群批量管理-Ansible(ad-hoc)

1. 概述 1. 自动化运维: 批量管理,批量分发,批量执行,维护 2. 无客户端,基于ssh进行管理与维护 2. 环境准备 环境主机ansible10.0.0.7(管理节点)nfs01 10.0.0.31(被管理节点)backup10.0.0.41(被管理节点) 2.1 创建密钥认证 安装sshpass yum install -y sshpass #!/bin/bash ##…

SpringBoot整合MyBatis记录

整体目录结构 创建数据库 创建一个MySQL的表&#xff0c;表名是student。 create table student (id int auto_increment comment 唯一标识idprimary key,name varchar(30) not null comment 姓名,age int not null comment 年龄 ) 插入一条数据记录到数据库当中去…

【数据结构与算法-高阶】并查集

【数据结构与算法-高阶】并查集 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;数据结构与算法&#x1f345; &#x1f33c;文章目录&#x1f33c; 1. 并查集原理 2. 并查集实现 3. 并查集应用 1. 并查集原理 在一些应用问题中&…

Matlab|基于遗传粒子群算法的无人机路径规划【遗传算法|基本粒子群|遗传粒子群三种方法对比】

目录 主要内容 模型研究 部分代码 结果一览 下载链接 主要内容 为了更高效地完成复杂未知环境下的无人机快速探索任务&#xff0c;很多智能算法被应用于无人机路径规划方面的研究&#xff0c;但是传统粒子群算法存在粒子更新思路单一、随机性受限、收敛速度慢…

修改calibre-web最大文件上传值

修改calibre-web最大文件上传值 Windows安装calibre-web&#xff0c;Python-CSDN博客文章浏览阅读541次&#xff0c;点赞10次&#xff0c;收藏11次。pip install calibreweb报错&#xff1a;error: Microsoft Visual C 14.0 or greater is required. Get it with "Microso…

案例:问题处理与原因分析报告的模板

系统上线后暴露的问题也是一种财富&#xff0c;我们需要从中吸收经验教训&#xff0c;规避其他类似的问题。对于上线后的问题如何进行原因分析&#xff0c;我提供两个分析报告的模板&#xff0c;供大家参考。 模板案例1&#xff1a;共性现象的原因分析报告 模板案例二&#xf…

C(十三)for、while、do - while循环的抉择 --- 打怪闯关情景

前言&#xff1a; 继C&#xff08;十&#xff09;for循环 --- 黑神话情景之后&#x1f449; https://blog.csdn.net/2401_87025655/article/details/142684637 今天&#xff0c;杰哥想用一个打怪闯关的场景让与大家一起初步认识一下for、while、do - while循环的抉择。&#xf…

Docker在linux系统中的下载与使用

Docker在linux系统中的下载与使用 一、docker作用,下载及安装二、docker镜像三、创建容器四、容器数据卷 一、docker作用,下载及安装 ubuntu下载安装docker 命令&#xff1a;在ubuntu上面执行这个命令 Docker version:查看docker是否安装成功 配置阿里云镜像加速:进入阿里云网站…

阿里140滑块-滑块验证码逆向分析思路学习

一、声明&#xff01; 原创文章&#xff0c;请勿转载&#xff01; 本文内容仅限于安全研究&#xff0c;不公开具体源码。维护网络安全&#xff0c;人人有责。 文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;均已做脱敏处…

JUC高并发编程8:读写锁

1 概述 1.1 悲观锁和乐观锁 在并发编程中&#xff0c;锁机制是用来控制多个线程对共享资源的访问。悲观锁和乐观锁是两种不同的并发控制策略。 1.1.1 悲观锁&#xff08;Pessimistic Locking&#xff09; 悲观锁假设在最坏的情况下&#xff0c;多个线程会同时访问和修改共享…

Qt-QDockWidget浮动窗口相关操作(49)

目录 描述 使用 描述 在 Qt 中&#xff0c;浮动窗⼝也称之为铆接部件。浮动窗⼝是通过 QDockWidget类 来实现浮动的功能。浮动窗口⼀般是位于核心部件的周围&#xff0c;可以有多个。 使用 创建我们可以参考下面的语法格式 使用起来也很简单&#xff0c;不过只能创建一个 Q…

【C语言】使用结构体实现位段

文章目录 一、什么是位段二、位段的内存分配1.位段内存分配规则练习1练习2 三、位段的跨平台问题四、位段的应用五、位段使用的注意事项 一、什么是位段 在上一节中我们讲解了结构体&#xff0c;而位段的声明和结构是类似的&#xff0c;它们有两个不同之处&#xff0c;如下&…

创建osd加入集群

故障原因&#xff1a;ceph节点一个磁盘损坏&#xff0c;其中osd69 down了&#xff0c;需要更换磁盘并重新创建osd加入ceph集群。 信息采集&#xff1a; 更换磁盘前&#xff0c;查询osd69对应的盘符&#xff1a; 将对应的故障磁盘更换后&#xff0c;并重做raid&#xff0c;然后查…

SDK4(note下)

以下代码涉及到了很多消息的处理&#xff0c;有些部分注释掉了&#xff0c;主要看代码 #include <windows.h> #include<tchar.h> #include <stdio.h> #include <strsafe.h> #include <string> #define IDM_OPEN 102 /*鼠标消息 * 键盘消息 * On…

76.【C语言】perror函数介绍

1.cplusplus的官网介绍 cplusplus的介绍 点我跳转 2.翻译 函数 perror void perror ( const char * str ); 打印错误信息 将errno(最后一个错误数字)的值解释为错误信息,之后把它打印到stderr中(标准错误输出流,通常是控制台)(备注有关"流"的概念在75.【C语言】文件…

k8s-pod的管理及优化设置

Pod是Kubernetes&#xff08;k8s&#xff09;中最小的资源管理组件&#xff0c;也是最小化运行容器化应用的资源对象。以下是对Pod的详细介绍&#xff1a; 一、Pod的基本概念 定义&#xff1a;Pod是Kubernetes中可以创建和管理的最小单元&#xff0c;是资源对象模型中由用户创…