package main
import (
"fmt"
"io"
"net/http"
"os"
"time"
"github.com/gin-gonic/gin"
)
func requestInfo(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"path": c.Request.URL.Path,
"Proto": c.Request.Proto,
"RemoteAddr": c.Request.RemoteAddr,
})
}
//基本服务器
func server1() {
r := gin.Default()
r.GET("/get", requestInfo)
r.PUT("/put", requestInfo)
r.POST("/post", requestInfo)
r.DELETE("/delete", requestInfo)
r.OPTIONS("/option", requestInfo)
r.Any("/any", requestInfo)
r.StaticFS("/StaticFS", gin.Dir("/", true)) //本地文件
r.Static("/Static", "image")
r.StaticFile("/StaticFile", "image/test.jpg")
r.Run(":9001")
}
type User struct {
Name string `json:"name" uri:"name" form:"name"`
Age int `json:"age" uri:"age" form:"age"`
}
//解析参数
func server2() {
r := gin.Default()
//解析uri
r.GET("/user/:name/:age", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"name": c.Param("name"),
"age": c.Param("age"),
})
var u User
c.ShouldBindUri(&u)
fmt.Println("name:", u.Name, ",age", u.Age)
})
//解析查询参数
r.GET("/query", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"name": c.Query("name"),
"age": c.Query("age"),
})
})
//解析表单
r.POST("/form", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"name": c.PostForm("name"),
"age": c.PostForm("age"),
})
var u User
c.ShouldBind(&u)
fmt.Println("name:", u.Name, ",age", u.Age)
})
//解析json
r.POST("/json", func(c *gin.Context) {
var u User
c.ShouldBindJSON(&u)
c.JSON(http.StatusOK, gin.H{
"name": u.Name,
"age": u.Age,
})
})
r.Run(":9001")
}
//上传文件
func server3() {
r := gin.Default()
//上传单个文件
r.POST("/upload", func(c *gin.Context) {
h, err := c.FormFile("file")
if err != nil {
fmt.Println("form file failed :", err)
return
}
err = c.SaveUploadedFile(h, h.Filename)
if err != nil {
fmt.Println("save file failed : ", err)
return
}
})
//上传多个文件
r.POST("/uploads", func(c *gin.Context) {
form, err := c.MultipartForm()
if err != nil {
fmt.Println("multi form failed:", err)
return
}
files := form.File["upload[]"]
for _, f := range files {
err := c.SaveUploadedFile(f, f.Filename)
if err != nil {
fmt.Println("save upload file failed")
return
}
}
})
r.Run(":9001")
}
//路由组
func server4() {
r := gin.Default()
v1 := r.Group("/v1")
{
v1.GET("/add", requestInfo)
v1.GET("/delete", requestInfo)
}
v2 := r.Group("/v2")
{
v2.GET("/add", requestInfo)
v2.GET("/delete", requestInfo)
}
r.Run(":9001")
}
func myLogger() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Printf("[%s##%s##%s]", c.Request.Method, c.Request.RemoteAddr, time.Now().Format("2006-1-2 15:04:05"))
c.Next()
fmt.Println(c.Writer.Status())
}
}
func userCheck() gin.HandlerFunc {
return func(c *gin.Context) {
name := c.PostForm("name")
id := c.PostForm("id")
if name == "admin" && id == "5211" {
c.Next()
} else {
c.Abort()
c.JSON(http.StatusForbidden, gin.H{
"status": "forbidden",
})
}
}
}
//中间件
func server5() {
r := gin.New()
//设置默认的日志中间件
r.Use(myLogger())
r.GET("/midlog", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"status": "ok",
})
})
r.Use(userCheck())
r.POST("/check", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"status": "ok",
})
})
r.Run(":9001")
}
func server6() {
r := gin.Default()
//关掉颜色,日志中不需要
gin.DisableConsoleColor()
f, err := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY, 0600)
if err != nil {
fmt.Println("open file failed:", err)
return
}
gin.DefaultWriter = io.MultiWriter(f)
r.GET("/log", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"result": "ok",
})
})
r.Run(":9001")
}
func server7() {
r := gin.Default()
r.GET("/cookie", func(c *gin.Context) {
cookie, err := c.Cookie("testcookie")
if err != nil {
fmt.Println("cookie failed :", err)
return
}
})
r.Run(":8080")
}
func main() {
//server1()
//server2()
//server3()
//server4()
//server5()
//server6()
server7()
}
gin框架基本使用
最新推荐文章于 2023-05-14 10:54:49 发布