一、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 get -u github.com/gin-gonic/gin
2、测试代码
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、运行原理
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、模板文件
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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Hello01 World!
</body>
</html>
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()
}
启动测试
多级目录模板指定
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}}
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学习+深入(一)
永远不要让无法完全信任的人知道你真正的实力有多少!