GoFrame避坑指南和实践干货(2)
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。
用GoFrame已经开发了一段时间,今天为大家分享避坑指南和实践干货。这些坑并不是框架设计者的问题,更多的是我作为初学者的各种摸石头过河~
前段时间有整理一篇# GoFrame避坑指南和实践干货,这篇算是续集吧。
Redis Setex
首先我们要知道这个概念:Redis Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
在goframe中是支持这么操作的:
go
_, err = g.Redis().Do("SETEX", redisKey, 86400, res)rune的使用
首先我们要知道rune是int32的别名:
go
type rune = int32golang中string底层是通过byte数组实现的。中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。
len([]rune("王中阳"))的长度,一个中文返回一个长度,而不是返回3个字符长度。
gvalid数据校验
在goframe中,我们可以在结构体中设置校验规则,不需要在业务逻辑中进行判断,这样能使我们的代码更清晰。
示例
go
//校验地址 if err := gvalid.CheckStruct(ctx, data.Address, nil); err != nil { response.ParamErr(r, err) }其中:data.Address 是需要校验的数据。在执行校验地址之前已经把传入的数据赋值到了对应的结构体:
go
var data *define.OrderServiceCreateReq if err := r.Parse(&data); err != nil { response.ParamErr(r, err) }其中:define.OrderServiceCreateReq 的定义如下:
go
```type OrderServiceCreateReq struct { SellerId uint `json:"sellerId"` AppId int `json:"appId"` ChannelId int `json:"channel_id"` OrderSn string `p:"orderSn" v:"orderSn@required#orderSn 必须传递"` Spu []*OrderServiceSkuReq `p:"spu" v:"spu@required#请输入spu"` Address *OrderServiceAddressReq `p:"address" v:"address@required#请输入address"` StrictMode bool `json:"strictMode"` PayType int `p:"payType