gin 框架分组

golang web框架,底层都是基于net/http封装实现的。各种框架的差异在于:路由的性能、接口易用性、防冲突(冗余性)。
gin在同类框架中性能卓越,号称比其他框架快40倍。指的是在路由计算时的性能(简单的helo world这种 server),并不是在高负载时候的性能比对。

url回顾:http://127.0.0.1:80/ai/file/icon/girl?width=100&high=80&color=gray
其中http是协议,也可以是ftp、rtsp等
127.0.0.1:80是地址和端口,默认是80端口(:80可以省略)
/ai/file/icon/girl是资源路径
width=100&high=80&color=gray是参数,参数之间用&连接。

web框架的路由,指的是url种的路径字段,以’/'分割出来的小片段,映射到不同的处理函数,谓之路由……,听起来高大上,其实效果如下:

if (uri == "/ai/file/icon/girl") {
	fmt.Println("请求女生照片")
} else {
	fmt.Println("请求男生照片")
}

gin中路由可以定义变量,例如:/ai/file/:type/:filename /avi/file/:type/*all
其中:type定义一个变量,gin在url的第三个位置个第四个位置的值记录下来,goroutine通过关键字"type" “filename” “all” 来获取具体变量。
关于gin的路由冲突,这里不着重介绍。

本文主要介绍分组,分组其实是跟域名,包名这种东西类似。在顶层讲资源划分成小范围,资源只要在一个范围内部不重复就行。
相当于:深圳市 大学路、上海市 大学路,其中深圳市、上海市就是域名,虽然都叫大学路,却能分辨出来不通过。

按照我们的传统,废话不多讲。上菜:

package main

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

func main() {
	router := gin.Default()

	// Simple group: v1
	v1 := router.Group("/api/v1")
	{
		v1.POST("/login", func(c *gin.Context) {
			c.JSON(
				http.StatusOK,
				gin.H{
					"code":  http.StatusOK,
					"msg": "hello /api/v1/login",
				},
			)
		})
		v1.POST("/submit", func(c *gin.Context) {
			c.JSON(
				http.StatusOK,
				gin.H{
					"code":  http.StatusOK,
					"mmsg": "hello /api/v1/submit",
				},
			)
		})
		v1.POST("/read", func(c *gin.Context) {
			c.JSON(
				http.StatusOK,
				gin.H{
					"code":  http.StatusOK,
					"msg": "hello /api/v1/read",
				},
			)
		})
	}

	// Simple group: v2
	v2 := router.Group("/api/v2")
	{
		v2.POST("/login", func(c *gin.Context) {
			c.JSON(
				http.StatusOK,
				gin.H{
					"code":  http.StatusOK,
					"msg": "hello /api/v2/login",
				},
			)
		})
		v2.POST("/submit", func(c *gin.Context) {
			c.JSON(
				http.StatusOK,
				gin.H{
					"code":  http.StatusOK,
					"msg": "hello /api/v2/submit",
				},
			)
		})
		v2.POST("/read", func(c *gin.Context) {
			c.JSON(
				http.StatusOK,
				gin.H{
					"code":  http.StatusOK,
					"msg": "hello /api/v2/read",
				},
			)
		})
	}

	router.Run(":8080")
}

你可能感兴趣的:(golang高性能服务器编程)