随笔分类 - Go语言学习笔记
摘要:一、什么是中间件 开发者自定义的一些钩子函数,用于请求到达不同的地方进行拦截,做一些处理,比如: 登陆之前进行拦截,判断请求是否携带token 登陆之后进行权限校验 限流 ... 二、中间件的简单使用 如下: package main import ( "github.com/gin-gonic/g
阅读全文
摘要:一、什么是路由组 在前面中写入路由是只是单纯的这样使用: func main() { router := gin.Default() // 路由 router.GET("/login", Login) router.POST("/do_login", DoLogin) router.GET("/us
阅读全文
摘要:一、基本使用 在前面的文章中说明了数据绑定,就是将传递的参数绑定到结构体上,避免一个个的通过方法去获取,那么又该如何对传递的参数值进行校验呢? 可以在结构体上打上标签: type LoginInfo struct { UserName string `form:"username" json:"us
阅读全文
摘要:一、问题引出 如果通过前端向后端传递数据,你可能会这样进行接收: 1、前台 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action=
阅读全文
摘要:一、自带函数 (一)print系列 1、简介 在go语言中的fmt包中存在: Print系列 Sprint系列 那么它们之间的区别是什么呢? package main import "fmt" func main() { name := "lily" fmt.Print(name) // Print
阅读全文
摘要:在Gin框架模板中使用 {{ }} 括号进行变量渲染,那么它自带有一些语法用法。 一、上下文 . 访问当前位置的上下文 . 引用模板中的根级上下文 后台: package main import ( "github.com/gin-gonic/gin" "net/ht
阅读全文
摘要:一、Form表单上传 (一)单文件上传 前端 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/post_upload"
阅读全文
摘要:一、GET请求处理 (一)路径参数 对于类似这样的请求:http://127.0.0.1:8080/index/12,那么如何获取最后路径中12的值呢? package main import ( "fmt" "github.com/gin-gonic/gin" "net/http" ) func
阅读全文
摘要:一、结构体 1、后端 package main import ( "github.com/gin-gonic/gin" "net/http" ) type User struct { Id int Name string Age int } func StructDemo(ctx *gin.Cont
阅读全文
摘要:一、模板的使用 1、加载模板路径 当使用gin.Default方法创建一个router后需要加载模板路径,加载的方法可以使用: LoadHTMLGlob 只有一个参数,通配符,如:router.LoadHTMLGlob("templates/*"),查找当前项目路径下template文件夹下所有的h
阅读全文
摘要:一、基本创建 (一)单条数据创建 模型表 type Base struct { ID int Name string Age int } 方法一 通过数据的指针来创建 base := Base{Name: "lily", Age: 18} result := db.Create(&base) //通
阅读全文
摘要:一、特性 全功能 ORM 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承) Create,Save,Update,Delete,Find 中钩子方法 支持 Preload、Joins 的预加载 事务,嵌套事务,Save Point,Rollb
阅读全文
摘要:一、网络编程基础 网络基础之TCP/IP协议族 网络编程之socket 二、TCP Socket编程 (一)流程 首先应该了解服务端和客户端的处理流程: 1、服务端处理流程 监听端口 接收客户端tcp链接,建立双方的链接 创建goroutine,处理该链接的请求 2、客户端处理流程 建立与服务端的链
阅读全文
摘要:一、反射的基本概念 (一)什么是反射 反射可以再运行时动态获取变量的各种信息,比如变量的类型、值等 如果时结构体变量,还可以获取到结构体本身的各种信息,比如结构体的字段、方法 通过反射,还可以修改变量的值、调用方法 不过使用反射,需要引入一个包:reflect 典型用法是用静态类型interface
阅读全文
摘要:在gin中通过如下代码可以正常的启动一个服务: package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { router := gin.Default() router.GET("/index", func(
阅读全文
摘要:一、模板引入 在进行Web开发中,你可能进行的项目是前后端不分离的情况,此时需要将html与后端放入一个工程中,gin框架支持这种做法,需要通过 LoadHTMLGlob() 或 LoadHTMLFiles()。 (一)LoadHTMLFiles 故名思义就是加载文件 1、main.go packa
阅读全文
摘要:一、表单基本校验 Gin是一个Web框架,提供Web服务,所以很多功能是通过第三方插件集成进去的,这里使用了https://github.com/go-playground/validator来处理的。它实现了结构体值验证以及基于标签的单个字段。所以可以将请求体绑定到结构体模型上。 需要在绑定的字段
阅读全文
摘要:路由分组顾名思义就是将具有一类功能的路由放到一起,有时也会因为不同版本的路由分成一个组: func main() { router := gin.Default() // Simple group: v1 v1 := router.Group("/v1") { v1.POST("/login", l
阅读全文
摘要:一、Gin中间件基础 中间件可以实现在整个请求或者响应的生命周期过程中对请求或者响应做一些额外的处理,比如说在每个请求进入路由匹配、函数处理前进行权限校验,避免在业务函数中进行处理,非常方便。那么在Gin中是如何做的呢? ... router := gin.Default() ... 在gin中的D
阅读全文
摘要:一、路径参数 func main() { router := gin.Default() // This handler will match /user/john but will not match /user/ or /user router.GET("/user/:name", func(c
阅读全文