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。

可扩展性

 

package main

import (
	"github.com/gin-gonic/gin"
	"log"
	"net/http"
)

func jsonHandler(context *gin.Context) {
	context.JSON(http.StatusOK, gin.H{
		"name": "张三",
		"age": 28,
		"gender": true,
		"account": 18888.88,
		"hobby": []string{"乒乓", "CF", "LOL"},
	})
}

func main() {
	r := gin.Default()  // 生成默认的路由器
	// 注册一个路由,使用GET方法,里面有一个路径字符串和一个函数
	r.GET("/hello", func(context *gin.Context) {
		context.String(http.StatusOK, "hello world.")
	})
	r.GET("/json", jsonHandler)

	// r.Run()第1种方式启动,其底层还是依赖了net/http, r.Run()只是多做了一些输出而已
	if err := r.Run("127.0.0.1:6060"); err != nil {
		log.Fatal(err)
	}

	// 第2种启动方式net/http启动
	//if err := http.ListenAndServe("127.0.0.1:6060", r); err != nil {
	//	log.Fatal(err)
	//}

	// 第3种方式启动(我们自定义服务器的配置)
	//s := http.Server{
	//	Addr: "127.0.0.1:7070",
	//	Handler: r,
	//	ReadTimeout: 10 * time.Second,
	//	WriteTimeout: 10 * time.Second,
	//	MaxHeaderBytes: 1 << 20,
	//}
	//if err := s.ListenAndServe(); err != nil {
	//	log.Fatal(err)
	//}

}

  

posted @ 2021-10-15 11:31  专职  阅读(182)  评论(0编辑  收藏  举报