Skip to content

fix: time.Time rendering in the diff returned by error message#1829

Open
ccoVeille wants to merge 1 commit intostretchr:masterfrom
ccoveille-forks:gospew-time-stringer
Open

fix: time.Time rendering in the diff returned by error message#1829
ccoVeille wants to merge 1 commit intostretchr:masterfrom
ccoveille-forks:gospew-time-stringer

Conversation

@ccoVeille
Copy link
Collaborator

@ccoVeille ccoVeille commented Nov 18, 2025

Summary

Improve formatting when dealing with time.Time now we vendored gospew

Changes

Now, go-spew is vendored, we can fix old issues we had.

We can fix the representation of time.Time in gospew

And remove the imperfect fix we had in place.

Motivation

#895 was created by @luan to solve some legitimate issues. It was released with v1.6.0 on May 29, 2020

But unfortunately, the changes lead to an issue with the way time.Time are rendered. So #989 was opened on Aug 1, 2020 by @AlekSi

The issue was somehow fixed with #1072 by @HaraldNordgren

#1072 was merged in Apr 27, 2021 (but only released in Mar 1, 2024 with v1.7.1 )

Unfortunately, the fix was incomplete, as it was working only for first level, so #1078 was opened on May 22, 2021 by @shawc71

#1079 was opened by @shawc71 on May 22, 2021 to try to fix the issue

But it was never merged, as the solution was also imperfect, and because they were no solution inside testify to fix this

So #1078 was left open until now.

Related issues

@ccoVeille ccoVeille changed the title chore: import go-spew from https://github.com/davecgh/go-spew fix: time.Time rendering in the diff returned by error message Nov 18, 2025
Now we vendored go-spew we can modify how time.Time values are handled.

We can remove the imperfect fix we had in place before.
@ccoVeille ccoVeille force-pushed the gospew-time-stringer branch from 3f71fbe to 7b28236 Compare November 28, 2025 11:38
@ccoVeille
Copy link
Collaborator Author

@brackendawson please review, it's ready.

I'm facing this issue with testify for ages, I cannot wait to see it fixed 😬

fredbi added a commit to fredbi/testify that referenced this pull request Jan 4, 2026
This is inspired by stretchr#1829,
but we proceed differently, not checking for a string type but for
type convertibility to a time instead.

Added more tests to check how embedded types, pointers etc actually render and don't cause
panic.

From the original issues:

* fixes stretchr#1078
* fixes stretchr#1079

Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
@fredbi
Copy link

fredbi commented Jan 4, 2026

@ccoVeille I found your PR definitely interesting but perhaps lacking a few things.
You may find an alternate implementation there go-openapi#27
The main differences are:

  • does not use type string representation, but type convertibility to time
  • does not sort using the string representation (time.Time does NOT implement sort.Interface), but uses time.Time.Compare instead
  • more tests with embedded types, private fields, pointers, nil values etc

Could be interesting to exchange our views

@ccoVeille
Copy link
Collaborator Author

Thanks @fredbi. I will take a look.

I saw the PRs you made in the last days.

I agree with you about the string sort that can lead to problem when comparing for example 999-12-31 and 1000-01-01

I'll review the PR in your fork also

fredbi added a commit to go-openapi/testify that referenced this pull request Jan 4, 2026
* fix: rendering time values
* added sortability for time.Time

This is inspired by stretchr#1829,
but we proceed differently, not checking for a string type but for
type convertibility to a time instead.

Added more tests to check how embedded types, pointers etc actually render and don't cause
panic.

From the original issues:

* fixes stretchr#1078
* fixes stretchr#1079

* doc: fixed a few hiccups in README

Signed-off-by: Frederic BIDON <fredbi@yahoo.com>

---------

Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Diffs on structs with nested time.Time objects produce hard to read diffs

2 participants