您的位置:首页 > 汽车 > 时评 > 框架template初识

框架template初识

2024/12/23 8:41:06 来源:https://blog.csdn.net/2301_79890350/article/details/141993903  浏览:    关键词:框架template初识

框架初识

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

Gin框架介绍

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

第一个Gin示例

package mainimport "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 == 200r.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 mainimport ("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/:

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com