Go Web开发框架 Gin

本文详细介绍了Go语言中的Web开发框架Gin,包括RESTful架构、模板创建与渲染、自定义函数、静态文件处理、JSON返回、参数获取、参数绑定、文件上传、请求重定向、路由与路由组以及中间件的使用。通过实例演示了如何在Gin中进行各种操作,是学习Gin框架的好资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Go Web开发框架 Gin

10.1 Gin

现在的开发模式是后端只提供一份数据,然后不管是移动端还是网页端,如果想要展现出不同的效果,可以自己根据这份数据个性化构建展示效果

下载Gin package

GOPROXY=https://goproxy.cn
go get -u github.com/gin-gonic/gin

引入使用即可

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

//使用Gin框架

func main() {

	r := gin.Default() //返回默认的路由引擎

	//访问路径以及返回
	r.GET("/hello", sayhello)

	//启动
	//封装了http.ListenAndServe
	r.Run(":8080")
}

func sayhello(c *gin.Context) {
	c.JSON(200, gin.H{
		"message": "Hello Golang",
	})
}

10.2 RESTful架构

REST是客户端和服务器之间进行交互的时候,使用HTTP协议中的四个请求方法代表不同的动作,更多的是一种规范

GET获取资源
POST新建资源
PUT更新资源
DELETE删除资源
r.GET("/book",...)
r.POST("/book",...)
r.PUT("/book",...)
r.DELETE("/book",...)

浏览器默认只能发送GET和POST请求,如果没有通过AJAX的话,那用postman作为测试工具

10.3 Gin框架模版创建、解析和渲染

我们仍然先按照三步走操作

第一步,定义模版文件index.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>posts/index</title>
</head>
<body>
{
  {.title}} //在模版中使用哈希表的键来传参
</body>
</html>

第二步和第三步,解析模版和渲染模版

func main() {
	//创建一个gin模版引擎路由
	r := gin.Default()

	//解析模版
	r.LoadHTMLFiles("./templates/index.tmpl")

	//创建并处理GET请求
	r.GET("/index", func(c *gin.Context) {//指定路径和handler
		c.HTML(http.StatusOK, "index.tmpl", gin.H{ //模版渲染,向模版中传入参数
			"title": "shiyivei.com",
		})
	})

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

渲染多个模版

可以通过define先重命名多个名字一样的模版文件,然后再解析

{
  {define "posts/index.tmpl"}} //重命名
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>posts/index</title>
</head>
<body>
{
  {.title}}
</body>
</html>
{
  {end}} //不要忘了end

解析

//解析模版
	r.LoadHTMLFiles("./templates/index.tmpl","templates/users/index.tmpl")

但是,当文件过多时,可以通过指定文件夹的方式加载所有tmpl文件

//解析模版
	//r.LoadHTMLFiles("./templates/index.tmpl", "templates/users/index.tmpl")
	r.LoadHTMLGlob("templates/**/*")

同样我们也需要多个path和handler来处理

func main() {
	//创建一个gin模版引擎路由
	r := gin.Default()

	//解析模版
	//r.LoadHTMLFiles("./templates/index.tmpl", "templates/users/index.tmpl")
	r.LoadHTMLGlob("templates/**/*")

	//创建并处理GET请求
	r.GET("/posts/index", func(c *gin.Context) {
		c.HTML(http.StatusOK, "posts/index.tmpl", gin.H{ //模版渲染
			"title": "posts/index.tmpl",
		})
	})
	//创建并处理GET请求
	r.GET("/users/index", func(c *gin.Context) {
		c.HTML(http
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值