Web framework-Gin

一、Gin

Go Web--Go Module

软件框架(software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

框架就是:偷懒的程序员,写代码发现写过了写的就是那些玩意,码农,只是代码的搬运工,干脆将代码进行封装, 之后进行重复使用的过程。

使用框架,可以大大的提升开发的效率。

其实用GO语言标准库就可以完成web开发,但是为什么使用框架呢?框架就是一个别人搭建好的舞台,有很多现成的工具可以提供给你用,你在此基础上开发效率肯定更高。

Go的Web框架分两派:

一派是基于标准库net/http的,比如gin-gonic/gin,labstack/echo,astaxie/beego

一派是基于valyala/fasthttp的,更偏向于性能,比如kataras/ iris , gofiber/fiber

1、Gin框架

Gin框架文档说明

2、新建Gin项目

Go Web--Go Module

1、下载并安装 gin:

Go 复制代码
go get -u github.com/gin-gonic/gin

2、测试代码

Go 复制代码
package main

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

func main() {
	r := gin.Default()
	r.GET("/test", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"msg": "test Gin success",
		})
	})
	r.Run()
}

访问测试http://localhost:8080/test

3、运行原理

Go 复制代码
package main

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

func Test(c *gin.Context) {
	c.JSON(200, gin.H{
		"msg": "test Gin success",
	})
}

func main() {
	//Default()返回的是一个引擎Engine,它是框架非常重要的数据结构,是框架的入口。
	//引擎 - 框架核心发送机 - 默认服务器 - 整个web服务都是由它来驱动的
	//Default()底层调用了New(),相当于New()的升级,New()返回的是一个引擎,
	//在此基础上多增加了中间件处理-engine.Use(Logger(), Recovery())
	r := gin.Default()
	//r := gin.New()
	//路由:通过访问"/test"的GET请求走这一条处理逻辑,走对应的函数中的内容
	//"/test" : 路由规则  函数:路由函数
	//路由请求方式:GET、POST、DELETE、PATCH、PUT、OPTIONS、HEAD、Any
	//函数:可以直接写匿名函数,还可以在外部定义函数使用
	//r.GET("/test", func(c *gin.Context) {
	//	c.JSON(200, gin.H{
	//		"msg": "test Gin success",
	//	})
	//})
	r.GET("/test", Test)

	//启动引擎 ,服务器启动
	//Run可以传入参数:host+port
	//中间拼接的冒号一定不要忘记
	//r.Run()
	r.Run(":9999")
	//r.Run("192.168.0.171:9999")
}

启动测试

4、数据交互

4.1、模板文件

Go 复制代码
1、Engine的LoadHTMLFiles方法:(不推荐)
func (engine *Engine) LoadHTMLFiles(files ...string) {
加载子指定的模板文件
不定长参数,可以传多个字符串,使用这个方法需要指定所有要使用的html文件路径
2、Engine的LoadHTMLGlob方法:(推荐)
func (engine *Engine) LoadHTMLGlob(pattern string) {
加载子文件夹下的模板文件
只有一个参数,通配符,如:templates/* ,意思是找当前项目路径下templates文件夹下所有的html文件
3、渲染HTML模板文件:Context的HTML方法:
func (c *Context) HTML(code int, name string, obj any) {
第一个参数:状态码
第二个参数:渲染的文件名
第三个参数:传入参数,空接口可以接受任意类型

HTTP状态码

创建templates文件夹下新建hello01.html和hello02.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    Hello01 World!
</body>
</html>
Go 复制代码
package main

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

func Test(context *gin.Context) {
	context.HTML(200, "hello01.html", nil)
}

func main() {
	r := gin.Default()
	//加载文件
	//r.LoadHTMLFiles("templates/hello01.html", "templates/hello02.html")
	r.LoadHTMLGlob("templates/*")
	r.GET("/test", Test)
	r.Run()
}

启动测试

多级目录模板指定

Go 复制代码
1、如果有多级目录,比如templates下有demo01和demo02两个目录,如果要使用里面的html文件,
必须得在Load的时候指定多级才可以,
比如:
r.LoadHTMLGlob("templates/**/*")

2、指定html文件,除了第一级的templates路径不需要指定,后面的路径都要指定
context.HTML(200, "demo02/hello02.html", nil)
3、在html中define定义目录
{{define "demo02/hello02.html"}}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    Demo02 Hello02 World!
</body>
</html>
{{end}}
Go 复制代码
package main

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

func Test(context *gin.Context) {
	context.HTML(200, "demo02/hello02.html", nil)
}

func main() {
	r := gin.Default()
	//加载文件
	//r.LoadHTMLFiles("templates/hello01.html", "templates/hello02.html")
	r.LoadHTMLGlob("templates/**/*")
	r.GET("/test", Test)
	r.Run()
}

启动测试

Golang学习+深入(一)

永远不要让无法完全信任的人知道你真正的实力有多少!

相关推荐
0x派大星6 天前
【Golang】——Gin 框架中的 API 请求处理与 JSON 数据绑定
开发语言·后端·golang·go·json·gin
get2006 天前
Gin 框架中间件详细介绍
中间件·gin
bigbig猩猩6 天前
Gin 框架中的表单处理与数据绑定
驱动开发·gin
荣~博客6 天前
Golang语言整合jwt+gin框架实现token
开发语言·golang·gin
拧螺丝专业户6 天前
gin源码阅读(2)请求体中的JSON参数是如何解析的?
前端·json·gin
留乘船7 天前
使用gin -gorm-jwt-中间件拦截的一个小项目
开发语言·学习·中间件·golang·gin
0x派大星8 天前
【Golang】——Gin 框架中的模板渲染详解
开发语言·后端·golang·go·gin
0x派大星9 天前
【Golang】——Gin 框架中的表单处理与数据绑定
开发语言·后端·golang·go·gin
杜杜的man9 天前
【go从零单排】gin+gorm理解及实现CRUD
开发语言·golang·gin
杨若瑜10 天前
Go语言24小时极速学习教程(五)Go语言中的SpringMVC框架——Gin
学习·golang·gin