Указатели, указатель на время

Пример из книги

func main() {
    var count1 *int
    count2:= new(int)
    countTemp:= 5
    count3:= &countTemp
    t:= &time.Time{}

    fmt.Printf("count1: %#v\n", count1)
    fmt.Printf("count2: %#v\n", count2)
    fmt.Printf("count3: %#v\n", count3)
    fmt.Printf("time: %#v\n", t)
}

На выходе получаем

count1: (*int)(nil)
count2: (*int)(0xc00000a0c8)
count3: (*int)(0xc00000a0e0)
time: time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC)

Чем отличается указатель на countTemp от указателя на время, почему у времени мы получаем value


Ответы (1 шт):

Автор решения: Pak Uula

Для типа time.Time определён метод GoString

Методы, определённые для конкретного типа, определены для указателя на этот тип. Следовательно, и тип time.Time, и *time.Time реализуют интерфейс fmt.GoStringer

В вашем случае спецификатор %#v вызывает именно метод GoString для указателя на Time

→ Ссылка