为了账号安全,请及时绑定邮箱和手机立即绑定

Go:如何以可读的方式格式化这个结构?

Go:如何以可读的方式格式化这个结构?

Go
慕码人2483693 2021-09-09 21:17:50
我有一个包装time.Time对象的结构,并希望以人类可读的方式对其进行格式化。package mainimport (    "time"    "fmt")type TimeStruct struct {    t time.Time}func main() {    t := time.Now()    fmt.Printf("time: %v\n", t)          // nice    ts := TimeStruct{t: t}    fmt.Printf("time struct: %#v\n", ts) // ugly}(播放)为什么 Go 不将t字段格式化TimeStruct为与普通time.Time对象相同的格式?是否有一种简单的方法可以以可读的方式对其进行格式化(无需为其定义额外的方法)?
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

您在使用时获得所需的人类可读时间的唯一方法%v是实现 Stringer 接口。


package main


import (

    "time"

    "fmt"

)


type TimeStruct struct {

    t time.Time

}

func (self TimeStruct) String() string {

    return fmt.Sprintf("TimeStruct{time.Time: %v}", self.t)

}


func main() {

    t := time.Now()

    ts := TimeStruct{t: t}

    // time struct: TimeStruct{time.Time: 2009-11-10 23:00:00 +0000 UTC}

    fmt.Printf("time struct: %v\n", ts)

}


查看完整回答
反对 回复 2021-09-09
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

另一种选择是嵌入时间,因此它的方法在您的TimeStruct(操场)上可用,例如


type TimeStruct struct {

    time.Time

}


func main() {

    t := time.Now()

    fmt.Printf("time: %v\n", t)


    ts := TimeStruct{Time: t}

    fmt.Printf("time struct: %v\n", ts)

}

哪个打印


time: 2009-11-10 23:00:00 +0000 UTC

time struct: 2009-11-10 23:00:00 +0000 UTC

请注意使用%vnot%#v将打印结构成员。


查看完整回答
反对 回复 2021-09-09
  • 2 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信