LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

GIN框架学习记录1——初始化第一个后端

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")

编写完毕后,我们就实现了一个简单的后端了。是不是很简单啦

img_show