gin框架快速入门

第一天

gin是go编写的轻量级http web框架,运行速度非常快

gin最擅长的就是API接口的高并发,如果项目规模不大,业务相对简单,适合用gin

gin的官网:

Gin Web Framework

热加载:go get github.com/pilu/fresh

package main

import "github.com/gin-gonic/gin"

func main() {
    //创建一个默认的路由引擎
    r := gin.Default()
    //配置路由
    r.GET("/", func(c *gin.Context) {
        c.String(200, "值:%v","Hello, Gin!")
    })//200也可以替换成http.StatusOK,那就需要引入net/http包
    //启动路由
    r.Run(":8080")//默认是8080,可以自定义为其他
}

gin路由中响应数据c.String(),c.JSON(),c.JSONP(),c.XML(),c.HTML()

c.String()

r.GET("/json1",func(c *gin.Context){
  c.String(200,"值:%v","nihao")
})

c.JSON()

//创建json格式
r.GET("/json1",func(c *gin.Context){
        c.JSON(200,map[string]interface{}{
            "success":"true",
        })
    })
//可以直接用系统的gin.H,这个就是map[string]interface{}的别名
r.GET("/json2",func(c *gin.Context){
        c.JSON(200,gin.H{
            "success":"true",
        })
    })
//也可以返回结构体,a是一个实例化的结构体
//还可以`json:title"`来控制小写输出
r.GET("/json3",func(c *gin.Context){
        a:=Article{
            Title: "datastructure",
            Author: "lxy",
        }
        c.JSON(200,a)
    })

c.JSONP()主要用于跨域请求

http://localhost:8080/jsonp?callback=xxxx

在jsonp后面加上?callback=xxxx会输出

xxxx({"Title":"datastructure","Author":"lxy"});

//和json基本一样,不过可以有回调函数
r.GET("/jsonp",func(c *gin.Context){
        a:=Article{
            Title: "datastructure",
            Author: "lxy",
        }        
        c.JSONP(200,a)
    })

c.XML()

只需要换成c.XML()即可

c.HTML()进行页面渲染

r := gin.Default()
//进行界面的加载,一定要紧紧挨着创建的语句
r.LoadHTMLGlob("templates/*")//加载templates里面所有的模板
r.GET("/news",func(c *gin.Context){
        c.HTML(200,"news.html",gin.H{
            "success":"true",
        })
    })
r.Run(":8080")

Gin HTML模板渲染

模板文件里面还有文件,一层文件多一个/**

r.LoadHTMLGlob("templates/*/")

可以在模板templates的html上面配置{{define "文件名/模板名"}}{{end}},相当于给模板起一个名称

然后在模板应用时,模板名为define后面这个名称

1、可以通过{{.}}输出数据

2、定义输出变量

定义:<h4>{{obj:=.title}}<h4>

输出:<br><h4>{{obj}}<h4><br>

3、比较函数

4、条件判断

<h2>{{.score}}</h2>

    {{if gt .score 90}}
    <p>优秀</p>
    {{else if ge .score 80}}
    <p>良好</p>
    {{else}}
    <p>及格</p>
    {{end}}

5、range循环遍历

如果value里面是一个结构体,则需要$value.属性名来继续获取

<ul>
    {{range $key,$value:=.score}}
    <li>{{$key}}---{{$value}}</li>
    {{else}}
    <li>切片中没有数据</li>
    {{end}}
</ul>
//
c.HTML(200,"news.html",gin.H{
            "score":[]string{"eat","sleep","play"},
})

6、with来解构结构体

把news传进去之后用with解构之后,后面就不需要再加.news了

<br>
    {{with .news}}
    <p>{{.Title}}</p>
    <p>{{.Author}}</p>
    {{end}}
<br>

7、预定义函数

执行模板时,函数从两个函数字典查找:首先时模板函数字典,然后时全局函数字典。一般不在模板内定义函数,而是用Funcs方法添加函数到模板里

预定义函数的使用:{{len .success}}

8、自定义模板函数

自定义模板函数要放在加载模板上面,创建引擎下面

func UnixToTime(timestamp int)string{
    t:=time.Unix(int64(timestamp),0)
    return t.Format("2006-01-02 15:04:05")
}
r := gin.Default()
//自定义模板函数
r.SetFuncMap(template.FuncMap{
    "UnixToTime":UnixToTime,
})
r.LoadHTMLGlob("templates/*")
//
{{UnixToTime .date}}

嵌套template

在一个模板应用另一个模板,在模板上面写上{{template "定义的另一个模板名字" .}},注意最后还有一个 .

可以嵌套多个模板

静态文件服务

配置静态web目录 第一个参数表示路由 第二个表示映射的目录

r.Static("/static","./static")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值