Gin 框架的使用(1)

简介: Gin 框架的使用

1、Gin 快速开发

1.1、环境准备

1.1.1、导入 gin 依赖

这里就叫 gin 依赖了,在 Goland 命令行中输入下面的命令:

go get -u github.com/gin-gonic/gin

1.1.2、设置代理

如果下载失败,最好设置一下代理,在 cmd 命令行中输入下面的命令:

go env -w GOPROXY=https://goproxy.cn,direct

完了之后再 Goland 这里同样设置启用 environment:

1.2、快速开发

1.2.1、Hello world

package main
 
import "github.com/gin-gonic/gin"
 
func main() {
  // 创建一个服务
  ginServer := gin.Default()
 
    // todo Go语言中的处理请求方法都是函数式编程:第一个参数是请求地址 第二个请求是函数
  // 访问地址,处理请求
  ginServer.GET("/hello", func(context *gin.Context) {
    context.JSON(200,gin.H{"msg":"hello world"})
  })
 
    // 设置服务器端口
  ginServer.Run(":8082") // 默认 8080
}

       上面,我们首先得到了 ginServer ,然后直接通过函数式编程,给 GET 请求 "/hello" 设置处理函数:直接返回给前端一段 JSON 数据。

       这个返回格式和我们之前学习的 SpringBoot 是不谋而合的,它们都会返回一个状态码和一段任意类型的信息(在 SpringBoot 中是 Object,在这里是 any 类型)。

启动程序,访问 localhost:8082:

1.2.2、给网页设置 icon  

直接在 Goland 命令行输入:go get "github.com/thinkerou/favicon":

直接在上面的代码基础上添加下面的代码:

import(
    "github.com/thinkerou/favicon"
)

在 main 方法中添加一行代码即可:

    // 设置网页icon
  ginServer.Use(favicon.New("./sxau.ico"))

测试:

// todo 新增用户
  ginServer.POST("/user", func(ctx *gin.Context) {
    ctx.JSON(200,gin.H{
      "msg":"新增用户",
    })
  })

1.2.3、给前端响应界面

1、加载 HTML 文件

       有两种方法,一种是加载 html 所在目录下所有文件,一种是加载单个 html 文件:

    // 加载静态页面
  ginServer.LoadHTMLGlob("static/html/*")
  //ginServer.LoadHTMLFiles("static/index.html") // 加载指定的 HTML 文件

2、加载 css、js
    // 加载资源文件 css、js
  ginServer.Static("/static","./static")

       此外,我们可以看到每次运行,Go 都会把我们的程序打包为一个 exe(windows),在 linux 和 mac 上同样会直接打包为一个可执行文件,所以特别方便!

1.2.4、获取请求中的参数

1)& ?格式
// 1. /user?user_id=xxx&username=xxx 格式
  ginServer.GET("/user", func(ctx *gin.Context) {
    user_id := ctx.Query("user_id")
    username := ctx.Query("username")
    ctx.JSON(http.StatusOK,gin.H{
      "user_id": user_id,
      "username": username,
    })
  })

2)RESTful 风格

SpringBoot 中我们使用 /user/{user_id} 的格式来传递参数,go 语言中我们使用 :user_id 来传递

// 2. /user/user_id/username
  ginServer.GET("/user/:user_id/:username", func(ctx *gin.Context) {
    user_id := ctx.Param("user_id")
    username := ctx.Param("username")
    ctx.JSON(http.StatusOK,gin.H{
      "user_id": user_id,
      "username": username,
    })
  })

1.2.5、序列化数据

把前端发来的数据(已经不是 json 了)转为 json 再返回:

  // todo 前端给后端传递 json
  ginServer.POST("/json", func(ctx *gin.Context) {
    // 从请求体(request.body)获得对象
    // GetRawData() 返回请求体切片[]byte和错误信息err
    data,err := ctx.GetRawData()
    fmt.Println("date => "+string(data))
    fmt.Println("err => ",err)
 
    var m map[string]interface{}
    // 序列化包装为json数据
    _ = json.Unmarshal(data,&m)
 
    ctx.JSON(http.StatusOK,m)
  })

1.2.6、获取表单数据

    // todo 新增用户
  ginServer.POST("/user", func(ctx *gin.Context) {
 
    // 对应表单的input标签的name属性
    username := ctx.PostForm("username")
    password := ctx.PostForm("password")
 
    ctx.JSON(200,gin.H{
      "msg":"新增用户",
      "username":username,
      "password":password,
    })
  })

1.2.5、路由之重定向到首页

重定向的状态码是 301 !

    // todo 路由
  ginServer.GET("/test", func(ctx *gin.Context) {
    // 重定向 301
    ctx.Redirect(http.StatusMovedPermanently,"/index")
  })

1.2.6、路由之404页面

    // 404
  ginServer.NoRoute(func(ctx *gin.Context) {
    // 它会自动拼接 static/html/
    ctx.HTML(http.StatusNotFound,"404.html",nil)
  })

1.2.7、路由之路由组

路由组就相当于我们 SpringBoot 中控制器类上面 @RequestMapping 的统一前缀:

    // 路由组(RESTful 风格)
  book := ginServer.Group("/book")
  {
    // 相当于访问 /book/id
    book.GET("/:id", func(ctx *gin.Context) {
 
    })
    // 相当于访问 /book/id
    book.DELETE("/:id", func(ctx *gin.Context) {
 
    })
  }

Gin 框架的使用(2)https://developer.aliyun.com/article/1534252

相关文章
|
Go API 网络架构
Gin框架快速入门1
Gin框架快速入门1
123 0
|
5月前
|
JSON 中间件 数据格式
Gin框架学习笔记(六)——gin中的日志使用
Gin框架学习笔记(六)——gin中的日志使用
171 0
|
5月前
|
前端开发 中间件 关系型数据库
|
5月前
|
JSON 中间件 API
Gin框架笔记(一) Gin框架的安装与Hello World
Gin框架笔记(一) Gin框架的安装与Hello World
198 0
|
6月前
|
XML JSON 人工智能
探索Gin框架:Golang Gin框架请求参数的获取
探索Gin框架:Golang Gin框架请求参数的获取
|
6月前
|
存储 人工智能 Go
探索Gin框架:Golang使用Gin完成文件上传
探索Gin框架:Golang使用Gin完成文件上传
|
API Go 网络架构
Kratos 大乱炖 —— 整合其他Web框架:Gin、FastHttp、Hertz
Kratos默认的RPC框架使用的是gRPC,支持REST和protobuf两种通讯协议。其API都是使用protobuf定义的,REST协议是通过[grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway)转译实现的。使用protobuf定义API是具有极大优点的,具有很强的可读性、可维护性,以及工程性。工程再大,人员再多,也不会乱。 一切看起来都是很美好的。那么,问题来了,我们现在使用的是其他的Web框架,迁移就会有成本,有风险,不可能一下子就把历史存在的代码一口气转换过来到Kratos框架。那我可以在Kratos中整合其他
871 0
|
JSON 中间件 数据库连接
gin 框架中的 gin.Context
Context 是 gin 中最重要的部分。 例如,它允许我们在中间件之间传递变量、管理流程、验证请求的 JSON 并呈现 JSON 响应。Context 中封装了原生的 Go HTTP 请求和响应对象,同时还提供了一些方法,用于获取请求和响应的信息、设置响应头、设置响应状态码等操作。
648 0
gin 框架中的 gin.Context
|
Go API
gin框架学习-快速安装gin
Gin 是一个用 Go (Golang) 编写的 Web 框架,由于 httprouter,它具有 martini 的 API,性能提高了 40 倍。具有高性能的优点。
164 0
gin框架学习-快速安装gin
|
开发工具
基于Gin封装Web框架 - 3. 初始化 rum 框架
基于Gin封装Web框架 - 3. 初始化 rum 框架
188 0
基于Gin封装Web框架 - 3. 初始化 rum 框架