В отличие от некоторых других языков, Go не рассматривает String () как метод де-факто маршалинга - вместо этого он предназначен просто для вывода значения в целях отладки. Вы можете разобрать этот формат в Time, если вы использовали правильную строку формата; тем не менее, правильная строка формата должна иметь точное время Mon Jan 2 15:04:05 MST 2006
, а не любое время; но формат, который выводит String (), не фиксируется константой в пакете Time, поэтому, вероятно, это не стоит делать.
Вместо этого, однако, то, что вы пытаетесь сделать, может быть лучше захвачено Методы MarshalText и UnmarshalText:
startStr, _ := time.Now().MarshalText()
fmt.Println(string(startStr)) // 2009-11-10T23:00:00Z
startTime := new(time.Time)
startTime.UnmarshalText(startStr)
fmt.Println(startTime) // 2009-11-10 23:00:00 +0000 UTC