第一个GIN的demo搭建细讲 | 青训营笔记

498 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第12篇笔记

😆在这里,我对今天所新学到的Golang主流的GIN框架的第一次搭建做了一次总结

😜Golang的其他知识在哪里找呢,那你就问对了

👨‍💻Golang基础复习 - 掘金 (juejin.cn) 在这里我总结了一些这篇文章没有提到的一些知识

😊如果有小伙伴能想到更多知识,欢迎大家在评论区留言,那么我们就开始吧

👩‍💻👨‍💻哟西,一个棕~

😎😎😎我是小小分割线

介绍

首先,贴出GIN的官网:Gin Web Framework (gin-gonic.com)

Gin是什么呢?

Gin的官网上这样写道:

Gin 是一个用 Go (Golang) 编写的 Web 框架。 它具有类似 martini 的 API,性能要好得多,多亏了 httprouter,速度提高了 40 倍。 如果您需要性能和良好的生产力,您一定会喜欢 Gin。

特性

快速

基于 Radix 树的路由,小内存占用。没有反射。可预测的 API 性能。

支持中间件

传入的 HTTP 请求可以由一系列中间件和最终操作来处理。 例如:Logger,Authorization,GZIP,最终操作 DB。

Crash 处理

Gin 可以 catch 一个发生在 HTTP 请求中的 panic 并 recover 它。这样,你的服务器将始终可用。例如,你可以向 Sentry 报告这个 panic!

JSON 验证

Gin 可以解析并验证请求的 JSON,例如检查所需值的存在。

路由组

可以进行路由分组

更好地组织路由。是否需要授权,不同的 API 版本…… 此外,这些组可以无限制地嵌套而不会降低性能。

错误管理

Gin 提供了一种方便的方法来收集 HTTP 请求期间发生的所有错误。最终,中间件可以将它们写入日志文件,数据库并通过网络发送。

内置渲染

内置了多种渲染

Gin 为 JSON,XML 和 HTML 渲染提供了易于使用的 API。

可扩展性

新建一个中间件非常简单

安装

要求:- Go 1.13 及以上版本

使用go get就可以安装了

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

分析

安装好之后我们就可以开始写我们第一个Gin的Demo了

首先,我们回忆一下

一个Web的demo需要一个处理器,和一个端口监听

我们来看看对应的API

首先Gin提供了引擎,我们来看看默认引擎

// Default returns an Engine instance with the Logger and Recovery middleware already attached.
func Default() *Engine {
   debugPrintWARNINGDefault()
   engine := New()
   engine.Use(Logger(), Recovery())
   return engine
}

我们可以看到默认引擎它就是默认返回已附加 Logger 和 Recovery 中间件的 Engine 实例

我们再来看看我们的处理器,我们就看最常用的Get

// GET is a shortcut for router.Handle("GET", path, handle).
func (group *RouterGroup) GET(relativePath string, handlers ...HandlerFunc) IRoutes {
   return group.handle(http.MethodGet, relativePath, handlers)
}

可以看到有两个参数

一个是相对路径

一个是处理方法,可以多个

我们来看看这个处理方法

// HandlerFunc defines the handler used by gin middleware as return value.
type HandlerFunc func(*Context)

我们可以看到有一个context对象参数,我们来看一下context对象常用的API

// String writes the given string into the response body.
func (c *Context) String(code int, format string, values ...interface{}) {
   c.Render(code, render.String{Format: format, Data: values})
}

我们可以看到这个方法用于将给定的字符串写入响应正文

这个方法里面有三个参数:

  1. ttp状态码

  2. 字符串

  3. values 是一个对象,可传零个或多个

我们再看看端口监听的API

// Run attaches the router to a http.Server and starts listening and serving HTTP requests.
// It is a shortcut for http.ListenAndServe(addr, router)
// Note: this method will block the calling goroutine indefinitely unless an error happens.
func (engine *Engine) Run(addr ...string) (err error) {
   defer func() { debugPrintError(err) }()

   if engine.isUnsafeTrustedProxies() {
      debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" +
         "Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.")
   }

   address := resolveAddress(addr)
   debugPrint("Listening and serving HTTP on %s\n", address)
   err = http.ListenAndServe(address, engine)
   return
}

我们可以看到

Run 将路由器连接到 http.Server 并开始侦听和服务 HTTP 请求。

它是 http.ListenAndServe(addr, router) 的快捷方式

它默认监听8080端口

使用

我们来写一个小demo看一看效果

package main

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

func main() {

   // 使用Gin默认的引擎
   engine := gin.Default()

   // 使用匿名函数传参
   engine.GET("/hello", func(context *gin.Context) {
      // 我们调用它的String这个API
      // 状态码200为OK
      context.String(200,"hello,你好世界")
   })

   // 默认在8080端口监听
   engine.Run()
}

运行起来可以看到确实默认监听8080端口

而且的确默认引擎是附加 Logger

image.png

此时运行效果为

image.png


此时我们的第一个Gin框架的demo就做好了

当然我们如果需要前后端分离的模式,接口想要Json的数据格式,那我们可以将String()换成Json()

😎😎😎又是我,我还是小小分割线

都用心看到这里了,那就求个赞吧😘

🥳🥳🥳如果小伙伴有其他的小知识,一定不要忘了在评论区讨论哟,多多讨论,生态才会越来越好