gin基本代码段

响应

字符串响应&JSON响应

package main

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

func main() {
	r := gin.Default() //定义默认路由

	r.GET("/hello", func(c *gin.Context) {

		//字符串响应
		c.String(http.StatusOK, "hello, world!\n")

		//JSON响应
		c.JSON(http.StatusOK, gin.H{
			"status": "ok\n",
		})		

	})

	r.Run(":9090")   //默认开启8080端口

}

 HTML响应

func main() {
	r := gin.Default() //定义默认路由

	//r.LoadHTMLGlob("templates/*")  //加载目录下所有模板文件
	r.LoadHTMLFiles("templates/index.tmpl")  //加载列出的模板文件


	r.GET("/hello", func(c *gin.Context) {
		
		//html响应(先加载模板后进行渲染)
		c.HTML(http.StatusOK, "index.tmpl", gin.H{
			"title":"Hello, HTML!",
		})	

	})

	r.Run(":9090")   //默认开启8080端口

}

index.tmpl

<html>
    <h1>
        {{ .title }}
    </h1>
</html>

重定向响应

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

	r.GET("/redirect", func(c *gin.Context){
		c.Redirect(http.StatusMovedPermanently, "http://www.baidu.com")
	})

	r.Run()

}

 请求及参数获取

func main() {

	r := gin.Default()

	// //获取URL参数(?后的由&连接的) http://127.0.0.1:9090/user?name=naruto
	r.GET("/user", func(c *gin.Context) {

		// name := c.Query("name")
		// name := c.DefaultQuery("name", "lili") //未查询到就设置为默认值
		name, ok := c.GetQuery("name") //取不到参数就返回空以及false
		//错误检查
		if !ok {
			name = "lili" //设置默认值
		}

		age, ok := c.GetQuery("age") //取不到参数就返回空以及false
		//错误检查
		if !ok {
			name = "lili" //设置默认值
		}
		c.JSON(http.StatusOK, gin.H{
			"name": name,
			"age":  age,
		})
	})


	//获取API参数
	r.GET("/user/:name", func(c *gin.Context) {
		name := c.Param("name")
		c.String(http.StatusOK, "Hello, "+name)
	})


	//获取form表单参数
	r.POST("/user", func(c *gin.Context){

		name := c.DefaultPostForm("name", "lili") //设置默认值
		password := c.PostForm("password")

		c.String(http.StatusOK, "Your name is " + name +	", your password is " + password)

	})
	
	r.Run(":9090")

}

文件传输

保存单个上传的文件

func main() {

	r := gin.Default()

	r.POST("/user", func(c *gin.Context) {

		file, err := c.FormFile("file") //接收文件及返回错误信息(不上传文件)
		//错误处理
		if err != nil {
			c.String(http.StatusOK, "err is :"+err.Error()+" ; Please upload a file.")

		}

		dst := "./" + file.Filename //定义存储路径
		c.SaveUploadedFile(file, dst)

		c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename))

	})

	r.Run()
}

保存多个上传的文件

func main() {

	r := gin.Default()

	r.MaxMultipartMemory = 8 << 20 //设定缓存为8M

	r.POST("/upload", func(c *gin.Context) {

		form, err := c.MultipartForm()
		if err != nil {
			c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err.Error()))
		}

		files := form.File["files"]

		for _, file := range files {
			if err := c.SaveUploadedFile(file, file.Filename); err != nil {
				c.String(http.StatusBadRequest, fmt.Sprintf("upload file err: %s", err.Error()))
				return
			}
		}

		c.String(http.StatusOK, fmt.Sprintf("Uploaded successfully %d files.", len(files)))
	})
	r.Run()
}

提供本地文件以供下载(静态文件)

func main() {
	r := gin.Default()
	//显示文件夹内的所有内容提供下载
	r.StaticFS("/showDir", http.Dir("."))
	r.StaticFS("/tem", http.Dir("./templates"))
	//显示指定路径的文件
	r.StaticFile("/picture", "C:/computerlanguange/go_code/0822/tmp/屏幕截图.png")

	r.Run()
}

数据绑定

知道确切类型(JSON, Form, Uri, Xml...)

func main(){

	type sss struct{
		User string `form: "username" json:"user" uri:"user" xml:"user" binding:"required"`
		Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
	}
	 
	r := gin.Default()

	r.POST("bind", func(c *gin.Context){
		var json sss
		if err := c.ShouldBindJSON(&json); err != nil{
			c.JSON(http.StatusBadRequest, gin.H{
				"error": err.Error(),
			})
			return
		}
		c.JSON(http.StatusOK, gin.H{"status": "ok"})
	})
	r.Run()
}

不知道确切类型

func main(){

	type sss struct{
		User string `form: "username" json:"user" uri:"user" xml:"user" binding:"required"`
		Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
	}
	 
	r := gin.Default()

	r.POST("bind", func(c *gin.Context){
		var Info sss
		if err := c.ShouldBind(&Info); err != nil{
			c.JSON(http.StatusBadRequest, gin.H{
				"error": err.Error(),
			})
			return
		}
		c.JSON(http.StatusOK, gin.H{"status": "ok"})
	})
	r.Run()
}

组和中间件

组(公共URI开头)

func main() {

	r := gin.Default()

	group1 := r.Group("/group1")
	{
		group1.GET("/login", func(c *gin.Context) {
			c.String(http.StatusOK, "login successfully.")
		})
		group1.GET("/logout", func(c *gin.Context) {
			c.String(http.StatusOK, "logout successfully.")
		})
	}

	r.Run()
}

中间件

自定义中间件函数

func MiddleWare() gin.HandlerFunc {
	return func(c *gin.Context) {
		time1 := time.Now()
		c.Next()

		times := time.Since(time1)
		fmt.Println("times: ", times)
	}
}

用中间件(中间件函数的输出信息在服务端看)

func main() {

	r := gin.Default()

	// 单个响应的中间件用法
	r.GET("/test", MiddleWare(), func(c *gin.Context) {
		c.String(http.StatusOK, "OK!")
	})

	// 多个响应的中间件用法
	r.Use(MiddleWare())
	{
		r.GET("test1", func(c *gin.Context) {
			c.String(http.StatusOK, "OK!")
		})
		r.POST("test1", func(c *gin.Context) {
			c.String(http.StatusOK, "OK!")
		})
	}
	r.Run()
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值