框架template初识

news2025/1/9 14:30:52

框架初识

框架就是一个别人帮我们搭好的舞台,造好了很多现成的工具供我们使用,让开发过程更快速、简洁。

Gin框架介绍

Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。
Gin是一个用Go语言编写的web框架。它是一个类似于martini 但拥有更好性能的API框架, 由于使用了 httprouter,速度提高了近40倍。

第一个Gin示例

package main

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

func sayHello(c *gin.Context) {
	c.JSON(200, gin.H{
		"message": "Hello golang!",
	})
}

func main() {
	// 创建一个默认的路由引擎
	r := gin.Default()
	// GET:请求方式;/hello:请求的路径
	// 指定客户端以GET方法请求访问/hello路径时,会执行后面的sayHello函数
	r.GET("/hello", sayHello)

	// 启动HTTP服务,默认在0.0.0.0:8080启动服务
	r.Run(":9090")
}

将上面的代码保存并编译执行,使用浏览器打开127.0.0.1:8080/hello 就能看到一串JSON字符串:
在这里插入图片描述

RESTful API

REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”。

REST的含义

REST的含义就是客户端与Web服务器之间进行交互的时候,使用HTTP协议中的4个请求方法代表不同的动作

  • GET用来获取资源
  • POST用来新建资源
  • PUT用来更新资源
  • DELETE用来删除资源

只要API程序遵循了REST风格,那就可以称其为RESTful API。目前在前后端分离的架构中,前后端基本都是通过RESTful API来进行交互。

【案例】图书管理系统

对一本书进行查询、创建、更新和删除等操作:
在这里插入图片描述
同样的需求按照RESTful API设计如下:
在这里插入图片描述
Gin框架支持开发RESTful API的开发:

func main() {
	r := gin.Default()
	
	// http.StatusOK == 200
	r.GET("/book", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"message": "GET",
		})
	})

	r.POST("/book", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"message": "POST",
		})
	})

	r.PUT("/book", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"message": "PUT",
		})
	})

	r.DELETE("/book", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"message": "DELETE",
		})
	})

	// 启动服务
	r.Run(":9090")
}

开发RESTful API的时候我们通常使用 Postman 来作为客户端的测试工具。
在这里插入图片描述

Go语言标准库之http/template

html/template包实现了数据驱动的模板,用于生成可防止代码注入的安全的HTML内容。它提供了和text/template包相同的接口,Go语言中输出HTML的场景都应使用html/template这个包。

模板与渲染

在一些前后端不分离的Web架构中,通常需要在后端将一些数据渲染到HTML文档中,从而实现动态的网页(网页的布局和样式大致一样,但展示的内容并不一样)效果。

  • 模板:事先定义好的HTML文档文件。
  • 模板渲染的作用机制:文本替换操作 - 使用相应的数据去替换HTML文档中事先准备好的标记。

Go语言的模板引擎

Go语言内置了文本模板引擎 text/template和用于HTML文档的html/template

模板引擎的作用机制

  1. 模板文件通常定义为 .tmpl.tpl 为后缀(也可以使用其他的后缀),必须使用UTF8编码。
  2. 模板文件中使用{{和}}包裹和标识需要传入的数据。
  3. 传给模板这样的数据就可以通过点号.来访问,如果数据是复杂类型的数据,可以通过{ { .FieldName }}来访问它的字段。
  4. {{}}包裹的内容外,其他内容均不做修改原样输出。

模板引擎的使用

定义模板文件

定义模板文件时需要按照相关语法规则去编写。

解析模板文件

上面定义好了模板文件之后,可以使用下面的常用方法去解析模板文件,得到模板对象:

// 解析模板字符串
func (t *Template) Parse(src string) (*Template, error)
// 解析模板文件
func ParseFiles(filenames ...string) (*Template, error)
// 解析很多个模板
func ParseGlob(pattern string) (*Template, error)

当然,也可以使用 func New(name string) *Template 函数创建一个名为name的模板,然后对其调用上面的方法去解析模板字符串或模板文件。

模板渲染

渲染模板简单来说就是使用数据去填充模板,当然实际上可能会复杂很多。

func (t *Template) Execute(wr io.Writer, data interface{}) error
func (t *Template) ExecuteTemplate(wr io.Writer, name string, data interface{}) error

基本示例

定义模板文件

按照Go模板语法定义一个hello.tmpl的模板文件,内容如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <title>Hello</title>
</head>
<body>
<p>Hello {{ . }}</p>
</body>
</html>

解析和渲染模板文件

创建一个main.go文件,在其中写下HTTP server端代码如下:

package main

import (
	"fmt"
	"html/template"
	"net/http"
)

func sayHello(w http.ResponseWriter, r *http.Request) {
	// 2. 解析模板
	t, err := template.ParseFiles("./hello.tmpl")
	if err != nil {
		fmt.Printf("Parse template failed, err:%v\n", err)
		return
	}
	// 3. 渲染模板
	name := "小王子"
	err = t.Execute(w, name)
	if err != nil {
		fmt.Printf("render template failed, err:%v\n", err)
		return
	}
}

func main() {
	http.HandleFunc("/", sayHello)
	err := http.ListenAndServe(":9000", nil)
	if err != nil {
		fmt.Printf("HTTP server start failed, err:%v\n", err)
		return
	}

效果

将上面的main.go文件编译执行,然后使用浏览器访问 http://127.0.0.1:9000/:

在这里插入图片描述

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

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

相关文章

企业网银登录提示请确认您已插入工商银行U盾证书的解决方法

昨天受人之托帮小企业财务解决上网银的问题 因为不是专业做这个的&#xff0c;所以只能安装“常识”行事&#xff0c;但结果实在是令人意想不到。 排错的步骤&#xff1a; 同一台电脑上尝试不同浏览器&#xff0c;发现360浏览器的接受度相当普遍&#xff1b;给U盾换不同的连接…

抖音引流脚本工具,实现自动化引流,解放大家双手

抖音引流脚本工具,实现自动化引流,解放大家双手 #获客引流 推荐阅读&#xff1a; 百收网SEO引流脚本软件不断更新&#xff08;推广全集教程&#xff09;https://www.bsw80.com/post/460.html 我们这篇文章的话&#xff0c;来去给大家说一下这个抖音这个同城评论&#xff0c;…

探索 RAD:5 个最佳实践案例解析

天下武功&#xff0c;唯快不破&#xff01;应用开发&#xff0c;唯速称王&#xff01; 在当今快速发展的科技环境中&#xff0c;企业面临的挑战不断升级。传统的应用开发方法往往因其复杂的流程和较长的开发周期而无法满足快速变化的市场需求。在这种背景下&#xff0c;快速应…

【阿里云】个人认证与公司认证

个人认证和企业认证的区别 更新时间&#xff1a;2024-05-20 09:32:52 本文档主要介绍个人认证账号和企业认证账号的区别。 账号实名认证分为个人实名认证和企业实名认证。 个人账号认证&#xff0c;请选择认证类型为 个人&#xff0c;支持个人支付宝授权认证和个人扫脸认证。…

如何免费将视频转换为 MP4?将视频转换为 MP4 的 5 种方法

您知道如何免费将不受支持的视频格式转换为 MP4 吗&#xff1f; 您可以轻松地在视频共享网站和社交应用上访问各种视频。从网站下载视频但无法使用媒体播放器播放是很常见的事。如何将视频转换为 MP4以便更好地播放&#xff1f; 事实上&#xff0c;市场上有很多视频音频转换工…

【Python 千题 —— 算法篇】字符统计

Python 千题持续更新中 …… 脑图地址 &#x1f449;&#xff1a;⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目背景 在编程中&#xff0c;对字符串的字符统计是一个常见任务。这在文本处理、数据分析、词频统计、自然语言处理等领域有广泛应用。无论…

PS插件DR5至臻高级版下载安装教程Photoshop美颜美白牙齿磨皮使用插件百度网盘分享

DR5至臻高级版PS插件DR5至臻高级版下载安装教程Photoshop美颜美白牙齿磨皮使用插件百度网盘分享链接地址可以对眼睛、眉毛、嘴唇等五官进行精细调整&#xff0c;如增强眼睛的明亮度和清晰度&#xff0c;使眉毛更加立体&#xff0c;嘴唇更加饱满可以快速有效地去除人像照片中的瑕…

使用 EMQX 开源版的 Webhook 机制处理消息并存储数据

1、前言 EMQX 是一款强大的开源 MQTT 消息代理&#xff0c;它支持大量的连接和高吞吐量&#xff0c;适用于各种物联网应用。Webhook 是 EMQX 提供的扩展功能之一&#xff0c;用于将消息推送到外部的 HTTP 服务。在本文中&#xff0c;我们将介绍如何使用 EMQX 开源版的 Webhook …

RabbitMQ 03 在项目中的实际使用: 告警,批处理

01.例子&#xff0c;解耦合&#xff08;使用异步&#xff09; 1.1异步思想&#xff1a;不会专门等待 1.2 例子&#xff1a;程序执行 1.3 如何设计程序 多线程&#xff1a; 订单请求模块只用于发送请求和处理确认&#xff0c;订单处理模块专门用于处理请求并且发送确认信…

金税四期工程运维:税务领域的信息化挑战与策略

在信息化浪潮的推动下&#xff0c;中国税务系统迎来了“金税四期”工程这一重大变革。作为税务信息化的新阶段&#xff0c;金税四期不仅标志着税务管理向更高效、更智能的方向迈进&#xff0c;同时也对运维工作提出了前所未有的挑战。本文将从金税四期的背景、运维需求分析、面…

101.对称二叉树

&#xff08;写给未来遗忘的自己&#xff09; 题目&#xff1a; 代码&#xff08;层次递归&#xff1a;&#xff09;&#xff1a; class Solution { public:bool isSymmetric(TreeNode* root) {std::queue<TreeNode*>lefttoright;std::queue<TreeNode*>righttol…

CSP-J基础之进制转换

文章目录 前言数制1. **二进制 (Binary)**2. **八进制 (Octal)**3. **十进制 (Decimal)**4. **十六进制 (Hexadecimal)** K进制转十进制例子 1&#xff1a;以二进制&#xff08;K 2&#xff09;为基数例子 2&#xff1a;以八进制&#xff08;K 8&#xff09;为基数例子 3&…

【MATLAB源码-第160期】基于matlab的胡桃夹子优化算法(NOA)无人机三维路径规划,输出做短路径图和适应度曲线

操作环境&#xff1a; MATLAB 2022a 1、算法描述 胡桃夹子优化算法&#xff08;Nutcracker Optimization Algorithm, NOA&#xff09;是一个灵感来源于胡桃夹子的故事的元启发式优化算法。这个故事中&#xff0c;胡桃夹子是一个能够将坚果壳轻易地破开以获取内部果仁的工具。…

滚珠花键助力生产加工精准化!

滚珠花键是一种机械传动元件&#xff0c;它通过花键轴与花键孔的配合&#xff0c;将动力从一个轴传递到另一个。在工业自动化领域内&#xff0c;滚珠花键系列产品主要用于辅助直线运动。尤其是在那些需要精密传动的应用场景&#xff0c;而滚珠花键在生产加工中的优势主要体现在…

Vulnhub:Dr4g0n b4ll 1

靶机下载地址 信息收集 主机发现 nmap扫描攻击机同网段存活主机。 nmap 192.168.31.0/24 -Pn -T4 靶机ip&#xff1a;192.168.31.183 端口扫描 nmap 192.168.31.183 -A -p- -T4 开放了22,80端口&#xff0c;端口详细信息如下&#xff1a; 网站信息收集 访问http服务。 …

WPF入门到跪下 第十一章 Prism(四)View与ViewModel的自动关联

View与ViewModel的自动关联 一、ViewModelLocator 在学习MvvmLight框架时&#xff0c;也使用了ViewModelLocator类。但在MvvmLight框架中&#xff0c;ViewModelLocator只是一个自定义类&#xff0c;与框架无关&#xff0c;目的就是初始化IOC容器。而在Prism框架中则不同&…

matplotlib中文乱码问题

在使用Matplotlib进行数据可视化的过程中&#xff0c;经常会遇到中文乱码的问题。显示乱码是由于编码问题导致的&#xff0c;而matplotlib 默认使用ASCII 编码&#xff0c;但是当使用pyplot时&#xff0c;是支持unicode编码的&#xff0c;只是默认字体是英文字体&#xff0c;导…

【LeetCode】08.字符串转换整数

题目要求 解题思路 本题没有难点&#xff0c;只需注意最大整数的比较时要切换成long long 代码实现 class Solution { public:int myAtoi(string s) {//标记正负号int flag1;long long ret0;int ns.size();int i0;//去除空格while(s[i] ) i;//识别符号if(s[i]-) flag-1;i…

vue项目打包后,生成的index.html直接本地打开后没内容

应该是文件路径找不到了 可以打开控制台看看 可以看到加载css&#xff0c;js&#xff0c;图标资源失败&#xff0c;所以是文件路径问题 vue-cli工程化生成的项目在打包后&#xff0c;默认的资源寻找路径是根&#xff0c;所以可以看到它直接在/F;/favicon找图标&#xff0c;但…

机器学习模型中的因果关系:引入单调约束

单调约束是使机器学习模型可行的关键&#xff0c;但它们仍未被广泛使用欢迎来到雲闪世界。 碳ausality 正在迅速成为每个数据科学家工具包中必不可少的组成部分。 这是有充分理由的。 事实上&#xff0c;因果模型在商业中具有很高的价值&#xff0c;因为它们为“假设”情景提…