猿问

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

我有一个包装time.Time对象的结构,并希望以人类可读的方式对其进行格式化。


package main


import (

    "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对象相同的格式?是否有一种简单的方法可以以可读的方式对其进行格式化(无需为其定义额外的方法)?


慕码人2483693
浏览 152回答 2
2回答

HUX布斯

您在使用时获得所需的人类可读时间的唯一方法%v是实现 Stringer 接口。package mainimport (    "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)}

慕田峪4524236

另一种选择是嵌入时间,因此它的方法在您的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 UTCtime struct: 2009-11-10 23:00:00 +0000 UTC请注意使用%vnot%#v将打印结构成员。
随时随地看视频慕课网APP

相关分类

Go
我要回答