The time library's "Truncate" method is clearly documented to operate since the zero time (i.e. in UTC). It would be useful if the library also included a function to operate in the scope of the time's current Location. Otherwise, one has to code one's own solution to get, for example, the midnight time of a given time:
func midnightOf(t time.Time) time.Time {
d := time.Duration(-t.Hour()) * time.Hour +
time.Duration(-t.Minute()) * time.Minute +
time.Duration(-t.Second()) * time.Second +
time.Duration(-t.Nanosecond) * time.Nanosecond
return t.Add(d)
}