go+beego自定义公共函数编写及实现根据时间戳计算与当前时间的间距及格式化单位
学习go已经有好几天了,准备把我的博客网站用go语言的beego框架重构一下,首页基本已经出来,后面在慢慢写步骤过程,
今天就在用写首页的时候需要用到的自定义公共函数功能,我模板调用需要,所以记录一下
1.创建公共函数
公共函数也算是工具,新建文件夹utils,并在该文件夹下创建functions.go文件
//公共函数
package utils
import (
"math"
"sort"
"strconv"
"time"
"github.com/astaxie/beego"
)
func Init() {
beego.AddFuncMap("FormatDate", FormatDate) //模板中使用{{FormatDate $out}}或{{$out|FormatDate}}
//有新的函数就依次加入
}
//根据时间戳计算与当前时间的间距及格式化单位
func FormatDate(in string) (out string) {
timeUnix := time.Now().Unix() //当前时间戳
inn, _ := strconv.ParseInt(in, 10, 64)
outt := timeUnix - inn
f := map[string]string{
"1": "秒",
"60": "分钟",
"3600": "小时",
"86400": "天",
"604800": "星期",
"2592000": "个月",
"31536000": "年",
}
var keys []string
for k := range f {
keys = append(keys, k)
}
//sort.Strings(keys)
//数字字符串 排序
sort.Slice(keys, func(i, j int) bool {
numA, _ := strconv.Atoi(keys[i])
numB, _ := strconv.Atoi(keys[j])
return numA < numB
})
for _, k := range keys {
v2, _ := strconv.Atoi(k)
cc := math.Floor(float64(int(outt) / int(v2)))
if 0 != cc {
out = strconv.FormatFloat(cc, 'f', -1, 64) + f[k] + "前"
}
}
return
}
2.入口文件main.go中初始化公共函数文件
import (
"gblog/utils"
)
func init() {
utils.Init() //注册函数
beego.BConfig.WebConfig.Session.SessionOn = true
}
3.view中使用 (用来格式化我的文章时间戳)
在我的views目录下的index.html文件里调用:{{FormatDate $elem.pubtime}}
<div class="list-group">
{{range $ind, $elem := .arts}}
<a href="/art/390" class="list-group-item">
<span style="float:right;color:#999;">
<i class="icon ion-eye"></i> {{$elem.view}} |
<small>{{FormatDate $elem.pubtime}}</small></span>
{{$elem.title}}
</a>
{{end}}
</div>
4.看看效果
ps: 都是利用下班时间,所以更新慢一点,
后面跟着写首页控制器,模板,布局收尾分离,分页,等文章
相关文章