code: func (t MysqlTime) GoTime(loc *gotime.Location) (gotime.Time, error) {
  	// gotime.Time can't represent month 0 or day 0, date contains 0 would be converted to a nearest date,
  	// For example, 2006-12-00 00:00:00 would become 2015-11-30 23:59:59.
  	tm := gotime.Date(t.Year(), gotime.Month(t.Month()), t.Day(), t.Hour(), t.Minute(), t.Second(), t.Microsecond()*1000, loc)
  	year, month, day := tm.Date()
  	hour, minute, second := tm.Clock()
  	microsec := tm.Nanosecond() / 1000
  	// This function will check the result, and return an error if it's not the same with the origin input.
  	if year != t.Year() || int(month) != t.Month() || day != t.Day() ||
  		hour != t.Hour() || minute != t.Minute() || second != t.Second() ||
  		microsec != t.Microsecond() {
  		return tm, errors.Trace(ErrInvalidTimeFormat.GenWithStackByArgs(t))
  	}
  	return tm, nil
  }
docs: // GoTime converts MysqlTime to GoTime.