gin

框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了。成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应手的时候,可以尝试改造一些框架,或是自己创造一个。
Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了1.0版本。具有快速灵活,容错方便等特点。其实对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错。框架更像是一些常用函数或者工具的集合。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。

	gin框架不是内置的,要去github上拉取

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

	既然是框架就不过多赘述,直接上手吧

开始使用,主要讲controller层

一般情况下
我们以 r := gin.Default() 开始 //内置了Logger和Default
Default returns an Engine instance with the Logger and Recovery middleware already attached.

以 r.Run() 为程序启动,默认的是8080端口

统一管理不存在的路由,很多时候都是返回404
r.LoadHTMLFiles("./login.html", "./fileUpload.html")
前端页面都是要提前加载到gin中的,才可以被渲染,不然直接调用就是notfound
func main() {
	r := gin.Default()
	r.LoadHTMLFiles( "./404.html")
	r.NoRoute(func(ctx *gin.Context) {
		ctx.HTML(http.StatusNotFound, "404.html", nil)
	})
	r.Run()
}
方便管理可以统一设置路由组,并可以简单的用restful风格进行开发
r.Any("/user", func(ctx *gin.Context)  可以匹配所有方式的请求
//路由组嵌套
	bookGroup := r.Group("/book")
	{
		bookGroup.GET("/index", func(ctx *gin.Context) {
			ctx.JSON(http.StatusOK, gin.H{
				"key": "index",
			})
		})
		bookGroup.GET("/index2", func(ctx *gin.Context) {
			ctx.JSON(http.StatusOK, gin.H{
				"key": "index2",
			})
		})
		//restful风格
		bookGroup.GET("/", func(ctx *gin.Context) {
			ctx.String(http.StatusOK, "getBook")
		})
		bookGroup.POST("/", func(ctx *gin.Context) {
			ctx.String(http.StatusOK, "addBook")
		})
		bookGroup.PUT("/", func(ctx *gin.Context) {
			ctx.String(http.StatusOK, "updateBook")
		})
		bookGroup.DELETE("/", func(ctx *gin.Context) {
			ctx.String(http.StatusOK, "deleleBook")
		})
	}

参数获取
//get请求下获取参数
name := ctx.Query("aa") //可以获取参数
name := ctx.DefaultQuery("aa","bb") //没有aa的参数就直接用bb这个值代替
name, ok := ctx.GetQuery("aa")      //不存在会返回false
//post请求下获取参数
username := ctx.PostForm("username")  //和get的参数取得方式不一样了
username := ctx.DefaultPostForm("username", "master_sxj")  //没有username就用默认的
username, ok := ctx.GetPostForm("username")//不存在时返回false
rest风格下的get 请求
//restful风格,顺便参数绑定
	r.GET("/hi/:name/:age", func(ctx *gin.Context) {
		//获取url参数
		name := ctx.Param("name")
		age := ctx.Param("age")
		ctx.JSON(http.StatusOK, gin.H{
			"name": name,
			"age": age,
		})
	})
参数绑定,很方便的把前端传过来的json转化为struct
//参数绑定
var u Account
err := ctx.ShouldBind(&u) //改变参数的值,必须传地址
重定向
r.GET("/test", func(ctx *gin.Context) {
		ctx.Redirect(http.StatusMovedPermanently,"https://www.baidu.com")
})
路由重定向,如登陆失败的时候等会涉及到
r.GET("/login", func(ctx *gin.Context) {
		//...
		//登陆失败跳回来
		ctx.Request.URL.Path = "/login"
		r.HandleContext(ctx)
})
渲染回前端
返回一个html页面:
ctx.HTML(http.StatusOK, "login.html", nil)
返回json格式的字符串:
ctx.JSON(http.StatusOK, data)  //data封装一个json字符串

简单的介绍了一下gin的视图层操作,以后继续补充~
有问题望指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值