栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

覆盖json.Marshal用于格式化time.Time的布局

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

覆盖json.Marshal用于格式化time.Time的布局

受zeebo的回答启发,并在该评论的注释中进行了散列:

http://play.golang.org/p/pUCBUgrjZC

package mainimport "fmt"import "time"import "encoding/json"type jsonTime struct {    time.Time    f string}func (j jsonTime) format() string {    return j.Time.Format(j.f)}func (j jsonTime) MarshalText() ([]byte, error) {    return []byte(j.format()), nil}func (j jsonTime) MarshalJSON() ([]byte, error) {    return []byte(`"` + j.format() + `"`), nil}func main() {    jt := jsonTime{time.Now(), time.Kitchen}    if jt.Before(time.Now().AddDate(0, 0, 1)) { // 1        x := map[string]interface{}{ "foo": jt, "bar": "baz",        }        data, err := json.Marshal(x)        if err != nil { panic(err)        }        fmt.Printf("%s", data)    }}

此解决方案将 time.Time
嵌入
jsonTime结构中。嵌入将所有time.Time方法提升为jsonTime结构,从而允许其使用而无需显式类型转换(请参见// 1)。

嵌入time.Time也不利于推广MarshalJSON方法,出于向后兼容的原因,编码/
json封送处理代码对MarshalText方法的优先级高于MarshalText方法(MarshalText是在Go
1.2中添加的,MarshalJSON
在此之前)。结果,使用默认的time.Time格式,而不使用MarshalText提供的自定义格式。

为了克服这个问题,我们为jsonTime结构覆盖了MarshalJSON。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417769.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号