Печать fmt пользовательского типа Golang

У меня есть пользовательский тип, подобный этому:

type Timestamp struct {
    Time time.Time  
}
// some more methods...

Теперь, когда я печатаю его экземпляр, используя fmt:

test := Timestamp{
    Time: time.Now(),
}
fmt.Println("TEST:", test)

вывод:

TEST: {2009-11-10 23:00:00 +0000 UTC m=+0.000000001}

Как я могу добавить пользовательское форматирование к пользовательскому типу, чтобы красиво распечатать вывод, например 2009-11-10T23:00:00Z, в случаях, когда он должен быть напечатан с использованием функций fmt (Println и т. д.)?


person Techradar    schedule 01.05.2020    source источник


Ответы (1)


Это так же просто, как добавить эту функцию:

func (ts Timestamp) Format(f fmt.State, c rune) {
    f.Write([]byte(ts.Time.Format(time.RFC3339)))
}

Выход:

TEST: 2020-05-01T08:25:14Z
person Techradar    schedule 01.05.2020
comment
Более простой способ для большинства случаев — предоставить метод String(). - person Flimzy; 01.05.2020