01_框架gin笔记

一、安装

go mod init ginchat

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

如果报错输入以下命令解决

go env -w GOPROXY="https://goproxy.io"  或者  go env -w GOPROXY="https://goproxy.cn"

go env -w GO111MODULE="on"

还报错就

go env -w GOSUMDB=off




二、基础服务

package main

import (

	"github.com/gin-gonic/gin"

	"log"

	"fmt"

)

func main(){

	engine:=gin.Default()

	engine.GET("/hello",func(context *gin.Context){




		fmt.Print("hello world:",context.FullPath()) // 后端打印

		name:=context.DefaultQuery("name","hello") //获取get请求参数name 如果没有则默认值为 hello

		context.Writer.Write([]byte("hello,gin\n")) // 前端输出




	})

	engine.Handle("POST","/login",func(context *gin.Context){

		username:=context.PostForm("username")  //获取post 参数 username 

		username,exist:=context.GetPostForm("username") // 获取post 参数username 如果存在则exist为ture 否则为false

	})

	// 路径中的变量加冒号

	engine.DELETE("/user/:id",func(context *gin.Context){

		userId:=context.Param("id")  //获取路径中的变量值

	})

	if err:=engine.Run();err!=nil {

		log.Fatal(err.Error())

	}

}




三、请求数据绑定

type Student struct{

	Name string `form:"name"`       //绑定参数中的name

	Classes string `form:"classes"`		//绑定参数中的classes

}




1、绑定get请求数据

var student Student 

err:= context.ShouldBindQuery(&student)

if err != nil {

	log.Fatal(err.Error())

	return

}

 

2、绑定post form 表单请求数据

err:= context.ShouldBind(&student)

可接收 ajax 的object{key:value}  或 form.serialize(key=val&key=val)  数据

3、绑定post json数据

err:=context.BindJSON(&student)




4、解析body

type Person struct {
   Name string `json:"name"`
   Code string `json:"code"`
}
json.NewDecoder(context.Request.Body).Decode(&person )


ajax 传  JSON.stringify(objct)	




5、接收file

	file,err:=context.FormFile("file")




四、输出 

	4.1、context.Writer.Write([]byte("hello"))  //

	4.2、context.Writer.WriteString("hello")

	4.3、context.JSON(200,map[string]interface{}{

			"code":1,

			"message":"请求成功",

			"data":name,

		})

	4.4、

	type Response struct{

		Code int

		Message string

		Data interface{}

	}

	resp:=Response{Code:1,Message:"ok",Data:name}

	context.JSON(200,&resp) 

	4.5、加载html	

	engine.LoadHTMLGlob("./html/*")  //加载html资源引擎

	enginx.Static("/img","./img")   //加载静态资源映射

	context.HTML(http.StatusOK,"index.html",nil)




	context.HTML(http.StatusOK,"index.html",gin.H{

		"resp":resp,

	})

	html模板引擎获取数据

	{{.resp.Code}}




五、路由组

	userGroup :=engine.Group("/user")


六、渲染带html 标签的字符串

  app:=gin.Default()
  app.SetFuncMap(template.FuncMap{
     "safe": func(str string) template.HTML {
        return template.HTML(str)
     },
    "trimHtml": func(src string) string {
       //将HTML标签全转换成小写
       re, _ := regexp.Compile("\\<[\\S\\s]+?\\>")
       src = re.ReplaceAllStringFunc(src, strings.ToLower)
       //去除STYLE
       re, _ = regexp.Compile("\\<style[\\S\\s]+?\\</style\\>")
       src = re.ReplaceAllString(src, "")
       //去除SCRIPT
       re, _ = regexp.Compile("\\<script[\\S\\s]+?\\</script\\>")
       src = re.ReplaceAllString(src, "")
       //去除所有尖括号内的HTML代码,并换成换行符
       re, _ = regexp.Compile("\\<[\\S\\s]+?\\>")
       src = re.ReplaceAllString(src, "\n")
       //去除连续的换行符
       re, _ = regexp.Compile("\\s{2,}")
       src = re.ReplaceAllString(src, "\n")
       return strings.TrimSpace(src)
    },
  })

//模板里
  {{.content|safe}}  //解析html标签
  {{.content|trimHtml}}  // 去除html标签






































userGroup.GET("/login",func(context *gin.Context){})