GIN框架学习记录1——初始化第一个后端
前言
别问,其实我早就在学了。但是现在梳理出来下
这不是一个正式的教学,只能作为参考
正文
gin框架初始化
关于安装和导入的教程,不想多说,想学gin框架的用户这些应该都会的吧
gin想要初始化,只需要一步即可,
server := gin.Default()
该命令代表初始化一个gin对象,使用默认的中间件(log+恢复器)
我们之后的操作,就基于我们生成出来这个server对象来操作了
PS:如果你想让终端有颜色,推荐加上这个命令
gin.ForceConsoleColor()
路由相关
gin初始化好了,咱们自然就要给路径分配路由,用于指向不同的功能(比如我们需要admin为后台/为主页,就需要路由来实现)
具体的语法如下
- 方法:代表请求协议方法,如GET/POST/PUT/DELETE
- 返回类型:返回给请求端的信息类型,如HTML/JSON/STRING
- 状态码:HTTP协议状态码,如200
- 具体返回内容:根据你选择的返回类型,写入具体的信息
server.<方法>("<路径>", func(context *gin.Context) {
context.<返回类型>(<状态码>, <具体返回内容>) })
看着很懵逼?我们来展示一个实战(返回string)
方法类型
这个示例将会展示不同的请求类型
注意:状态码部分,我使用了一个叫http.StatusOK的变量来代替了200,这个变量指向就是200,在此推荐使用这种写法,这样哪怕一些极端环境(比如更换了200的定义),系统也会自动修改。
# 使用GET方法,返回ABAB
server.GET("/", func(context *gin.Context) {
context.String(http.StatusOK, "ABAB")
})
# 使用POST方法,返回ABAB
server.POST("/post", func(context *gin.Context) {
context.String(http.StatusOK, "ABAB")
})
# 使用PUT方法,返回ABAB
server.PUT("/put", func(context *gin.Context) {
context.String(http.StatusOK, "ABAB")
})
# 使用DELETE方法,返回ABAB
server.DELETE("/delete", func(context *gin.Context) {
context.String(http.StatusOK, "ABAB")
})
路径相关
这个示例会展示根据不同的路径使用不同的路由
请注意,可以使用不同的方法指定同一个路径,如使用GET指定/和使用POST指定/为不同的路由是可以的
# 下方统一使用GET方法,这里我们指定/路径为路由,返回字符串根
server.GET("/", func(context *gin.Context) {
context.String(http.StatusOK, "根")
})
# 指定/home路径 返回家字符
server.GET("/home", func(context *gin.Context) {
context.String(http.StatusOK, "家")
})
# 展示同一路径,不同协议
server.GET("/", func(context *gin.Context) {
context.String(http.StatusOK, "我是/下的GET协议路由")
})
server.POST("/", func(context *gin.Context) {
context.String(http.StatusOK, "我是/下的POST协议路由")
})
返回类型与返回内容
这部分比较特殊,我们在之前的演示中,都是返回string,但是,在我们实际开发中,我们可能会返回HTML,JSON,JSONP等类型,这样的话,我们就需要指定返回类型(指定的类型其实就是Content-Type)
我们看一组实例
返回string
这是最简单的一种了,直接给前端返回一串字符串
server.GET("/", func(context *gin.Context) {
context.String(http.StatusOK, "我会返回string类型")
})
返回json
这个就比较特殊了,在gin框架中,定义我们需要传入的信息为interface空接口,因此如果我们几乎可以返回任何结构体,但是前提还是他得满足json的定义,在gin框架中,给我们定义了一个快捷的结构体gin.H,该结构体可以直接返回,我们可以自由编辑,适合临时使用,对于实际情况下,我们建议对我们的信息单独定义个结构体。
# 使用gin.H返回json
server.GET("/", func(context *gin.Context) {
context.JSON(200,gin.H{
"code":200
})
})
# 单独定义结构体
type testStruct struct {
Code int
Message string
}
server.GET("/", func(context *gin.Context) {
# 我们在这里初始化结构体
result:=&testStruct{
Code: "200",
Message: "结构体",
}
context.JSON(200,result)
})
返回HTML
返回HTML比较特殊,我们需要在我们程序运行的目录下,新建指定的路径,然后在程序中导入路径后使用。
具体看这个示例
该示例在一个路径下,该路径下有个templates文件夹,该文件夹下有一个HTML文件,名称为index.html
# 读取对应的路径
server.LoadHTMLGlob("templates/*")
# 指向路由
serverAdmin.GET("/news", func(context *gin.Context) {
context.HTML(http.StatusOK, "index.html", nil)
})
在这样操作后,访问/news,就会自动返回index.html中的内容了,HTML返回有很多玩法,会在后面讲到
其他类型
自己研究,哈哈
启动程序
当我们配置好路由后,就可以准备开始运行了,但是,我们还需要为其指定端口号信息,才能在指定端口上运行,具体如下
其中:8080就是你要运行在的端口号了
server.Run(":8080")
编写完毕后,我们就实现了一个简单的后端了。是不是很简单啦
