0%

HTML 渲染

使用 LoadHTMLGlob() 或者 LoadHTMLFiles()

1
2
3
4
5
6
7
8
9
10
11
func main() {
router := gin.Default()
router.LoadHTMLGlob("templates/*")
//router.LoadHTMLFiles("templates/template1.html", "templates/template2.html")
router.GET("/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"title": "Main website",
})
})
router.Run(":8080")
}

templates/index.tmpl

1
2
3
4
5
<html>
<h1>
{{ .title }}
</h1>
</html>

使用不同目录下名称相同的模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func main() {
router := gin.Default()
router.LoadHTMLGlob("templates/**/*")
router.GET("/posts/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "posts/index.tmpl", gin.H{
"title": "Posts",
})
})
router.GET("/users/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "users/index.tmpl", gin.H{
"title": "Users",
})
})
router.Run(":8080")
}

templates/posts/index.tmpl

1
2
3
4
5
6
7
{{ define "posts/index.tmpl" }}
<html><h1>
{{ .title }}
</h1>
<p>Using posts/index.tmpl</p>
</html>
{{ end }}

templates/users/index.tmpl

1
2
3
4
5
6
7
{{ define "users/index.tmpl" }}
<html><h1>
{{ .title }}
</h1>
<p>Using users/index.tmpl</p>
</html>
{{ end }}

自定义模板渲染器
你可以使用自定义的 html 模板渲染

1
2
3
4
5
6
7
import "html/template"
func main() {
router := gin.Default()
html := template.Must(template.ParseFiles("file1", "file2"))
router.SetHTMLTemplate(html)
router.Run(":8080")
}

自定义分隔符
你可以使用自定义分隔

1
2
3
r := gin.Default()
r.Delims("{[{", "}]}")
r.LoadHTMLGlob("/path/to/templates")

自定义模板功能 main.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import (
"fmt"
"html/template"
"net/http"
"time"
"github.com/gin-gonic/gin"
)
func formatAsDate(t time.Time) string {
year, month, day := t.Date()
return fmt.Sprintf("%d/%02d/%02d", year, month, day)
}
func main() {
router := gin.Default()
router.Delims("{[{", "}]}")
router.SetFuncMap(template.FuncMap{
"formatAsDate": formatAsDate,
})
router.LoadHTMLFiles("./testdata/template/raw.tmpl")
router.GET("/raw", func(c *gin.Context) {
c.HTML(http.StatusOK, "raw.tmpl", map[string]interface{}{
"now": time.Date(2017, 07, 01, 0, 0, 0, 0, time.UTC),
})
})
router.Run(":8080")
}

raw.tmpl

1
Date: {[{.now | formatAsDate}]}

结果:

1
Date: 2017/07/01

AsciiJSON

使用 AsciiJSON 生成具有转义的非 ASCII 字符的 ASCII-only JSON。

1
2
3
4
5
6
7
8
9
10
11
12
13
func main() {
r := gin.Default()
r.GET("/someJSON", func(c *gin.Context) {
data := map[string]interface{}{
"lang": "GO语言",
"tag": "<br>",
}
// 输出 : {"lang":"GO\u8bed\u8a00","tag":"\u003cbr\u003e"}
c.AsciiJSON(http.StatusOK, data)
})
// 监听并在 0.0.0.0:8080 上启动服务
r.Run(":8080")
}

Git拉取远程仓库的某一分支到本地

a) 本地有其他分支到项目:
git checkout -b localfast origin/fast
git pull origin fast
b)本地没有项目
git clone -b 分支名 仓库地址

git添加多个远程仓库

配置远程仓库

1
git remote add origin https://url

添加另外一个远程仓库

1
git remote set-url --add origin https://url

一次性提交到所有仓库

1
git push --all

自己常用的一些mysql操作

1、把当天出票时间转unix时间戳到某排序字段,方便程序排序

1
2
3
4
BEGIN
update jw_items AS jw set jw.chupiao_top = 0;
update jw_items AS jw set jw.chupiao_top = unix_timestamp(jw.quchendate) WHERE (jw.chupiaodate = DATE_FORMAT(now(),'%Y/%c/%e')) AND ishidden <> 1;
END

2、定时检测付款状态把未按设置时间段的订单重置

1
update jw_orders od,jw_config conf,jw_items jw set od.paystate = 3 WHERE (from_unixtime(od.ordertime + conf.order_keeptime*3600) <= NOW()) AND (od.ordertime > 0) AND (jw.id = od.itemsid) AND (od.paystate IN (1,2))

3、把相关字段日期字符转unix时间戳

1
unix_timestamp(xxx_field)

4、把字符串日期格式加一天并更新

1
UPDATE tables SET field = date_format(DATE_ADD(STR_TO_DATE(field,'%Y/%c/%e'),INTERVAL 1 DAY),'%Y/%c/%e') WHERE id = xxx

5、保留七天日志

1
DELETE FROM jw_tablesxxx WHERE op_time < (UNIX_TIMESTAMP(DATE_FORMAT(NOW(),'%Y-%m-%d')) - 604800)

6、 删除无关系操作日志

1
DELETE tb_a FROM jw_xxxx_logs as tb_a INNER JOIN(SELECT jw_xxxx_logs.id FROM jw_items RIGHT JOIN jw_xxxx_logs on jw_xxxs.id = jw_xxxx_logs.jwid WHERE jw_xxxs.id IS NULL) as tb_b on tb_b.id = tb_a.id

……

未完等补充

mysql格式化日期

mysql查询记录如果有时间戳字段时,查看结果不方便,不能即时看到时间戳代表的含义,现提供mysql格式换时间函数,可以方便的看到格式化后的时间。

1.DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。

1
DATE_FORMAT(date,format)

format参数的格式有

参数 说明
%a 缩写星期名
%b 缩写月名
%c 月,数值
%D 带有英文前缀的月中的天
%d 月的天,数值(00-31)
%e 月的天,数值(0-31)
%f 微秒
%H 小时 (00-23)
%h 小时 (01-12)
%I 小时 (01-12)
%i 分钟,数值(00-59)
%j 年的天 (001-366)
%k 小时 (0-23)
%l 小时 (1-12)
%M 月名
%m 月,数值(00-12)
%p AM 或 PM
%r 时间,12-小时(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 时间, 24-小时 (hh:mm:ss)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,与 %X 使用
%v 周 (01-53) 星期一是一周的第一天,与 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
%v 年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y 年,4 位
%y 年,2 位

例子:

1
2
3
4
DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p') 
DATE_FORMAT(NOW(),'%m-%d-%Y')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')

2. MySQL 格式化函数 FROM_UNIXTIME()

1
2
3
SELECT FROM_UNIXTIME(date, '%Y-%c-%d %h:%i:%s' ) as post_date ,   
date_format(NOW(), '%Y-%c-%d %h:%i:%s' ) as post_date_gmt
FROM `article` where outkey = 'Y'

1、FROM_UNIXTIME( unix_timestamp )

参数:一般为10位的时间戳,如:1417363200
返回值:有两种,可能是类似 ‘YYYY-MM-DD HH:MM:SS’ 这样的字符串,也有可能是类似于 YYYYMMDDHHMMSS.uuuuuu 这样的数字,具体返回什么取决于该函数被调用的形式。

2、FROM_UNIXTIME( unix_timestamp ,format )

参数 unix_timestamp :与方法 FROM_UNIXTIME( unix_timestamp ) 中的参数含义一样;
参数 format : 转换之后的时间字符串显示的格式;
返回值:按照指定的时间格式显示的字符串;