Gin 是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点。
对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错
借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助干团队的编码风格和形成规范
go get -u github.com/gin-gonic/gin
func main() {
//创建路由
r :=gin.Default()
//绑定路由,执行的函数
//gin.Context,封装了request和respose
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK,"hello hello")
})
r.Run(":8080")
}
浏览输入:localhost:8080即可。
前端页面html
main.go
限制大小的文件上传并上传多个文件
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
//创建路由
r :=gin.Default()
v1 := r.Group("/v1")
{
v1.GET("/login",login)
v1.GET("/registry",registry)
}
v2 := r.Group("/v2")
{
v2.POST("/login",login)
v2.POST("/registry",registry)
}
//绑定路由,执行的函数
//gin.Context,封装了request和respose
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK,"hello hello")
})
r.Run(":8080")
}
func login(c *gin.Context) {
name := c.DefaultQuery("name","jack")
c.String(200,fmt.Sprintf("login: hello %s\n",name))
}
func registry(c *gin.Context) {
name := c.DefaultQuery("name","jack")
c.String(200,fmt.Sprintf("registry: hello %s\n",name))
}
结构体:
type Login struct {
User string `form:"username" json:"user" url:"user" xml:"user" binding:"required"`
Password string `form:"password" json:"password" url:"password" xml:"password" binding:"required"`
}
r :=gin.Default()
//绑定路由,执行的函数
//gin.Context,封装了request和respose
r.GET("/", func(c *gin.Context) {
var json Login
err := c.ShouldBindJSON(&json)
if err != nil {
//返回错误
c.JSON(500,gin.H{"error":err.Error()})
}
fmt.Println(json.User,json.Password)
c.String(200,fmt.Sprintf("login: user = %s,password = %s \n",json.User,json.Password))
//c.JSON(200,json)
})
r.Run(":8080")
r.GET("/", func(c *gin.Context) {
var form Login
if err :=c.Bind(&form); err != nil{
//返回错误
c.JSON(500,gin.H{"error":err.Error()})
}
c.JSON(http.StatusOK,gin.H{"ok":form})
})
r.Run(":8080")
r.POST("/:user/:password", func(c *gin.Context) {
var login Login
//如果想用地址栏拼参数的方法,例如:http://localhost:8000/gin?user=zhangsan&password=123
//可以用c.Query("key")来获取值
err := c.ShouldBindUri(&login)
if err != nil {
//返回错误
c.JSON(500,gin.H{"error":err.Error()})
}
fmt.Println(login.User,login.Password)
//c.String(200,fmt.Sprintf("login: user = %s,password = %s \n",login.User,login.Password))
//c.JSON(200,json)
c.JSON(http.StatusOK,gin.H{"ok":login})
})
r.Run(":8080")