我time.Duration
用来将数据存储在一个结构中,如下所示:
type ApiAccessToken struct {
...
ExpiredIn *time.Duration `bson:"expired_in,omitempty" json:"expired_in,omitempty"`
...
}
我使用这样的常量进行设置:
...
const ApiAccessTokenDefaultExpiresIn = 7 * 24 * time.Hour
...
d := ApiAccessTokenDefaultExpiresIn
data := &ApiAccessToken{
...
ExpiredIn: &d
...
}
...
然后我mgo
将数据插入数据库。
在创建data
实例之后并插入数据之前,我做了检查,值ExpiredIn
是604'800'000'000'000,但是在MongoDB中,它变成了604'800'000(或NumberLong(604800000)
)。
知道为什么吗?谢谢!
当前解决方案: ExpiredIn
用MongoDB 返回的值乘以 time.Second
我得到Go味的纳秒 time.Duration
。
我最终使用的string
表示形式,time.Duration
因为它很简单。
我为我的ApiAccessToken
结构创建了两个函数,它们可以完成数据的读写操作。
func (tok *ApiAccessToken) SetExpiredIn(t time.Duration) {
s := t.String() // read the string
tok.ExpiredIn = &s
}
func (tok *ApiAccessToken) GetExpiredIn() (r bool, t time.Duration) {
if tok.ExpiredIn != nil {
var err error
t, err = time.ParseDuration(*tok.ExpiredIn) // parse the string
r = (err == nil) // can we use this?
}
return
}
瞧,它有效!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句