Skip to content

export sentinel errors so callers can use errors.Is#27

Open
c-tonneslan wants to merge 2 commits into
fatih:masterfrom
c-tonneslan:feat/export-error-sentinels
Open

export sentinel errors so callers can use errors.Is#27
c-tonneslan wants to merge 2 commits into
fatih:masterfrom
c-tonneslan:feat/export-error-sentinels

Conversation

@c-tonneslan

Copy link
Copy Markdown

Closes #24.

Per @fatih's note on the issue, the sentinel errors were unexported, so callers were stuck doing string-compare on the message to handle a 'tag not found' specifically. Promote them to `ErrXxx` and keep the lowercase names as aliases so the internal call sites compile unchanged.

Lets users write:

```go
tag, err := tags.Get("json")
switch {
case errors.Is(err, structtag.ErrTagNotExist):
...
case err != nil:
...
}
```

Per the maintainer's note in fatih#24, the package-level error variables
were unexported, so callers had to do string-compare on the error
message to handle 'tag not found' specifically.

Promote them to ErrXxx and keep the lowercase aliases pointing at the
exported ones so existing call sites compile unchanged.

Closes fatih#24

Signed-off-by: Charlie Tonneslan <cst0520@gmail.com>
@fatih

fatih commented May 18, 2026

Copy link
Copy Markdown
Owner

I think you can just export them, it wouldn't break anything.

Per @fatih's review note - the aliases aren't needed, just exporting
the sentinels in place doesn't break anything because they're only
used inside the package. Renamed the call sites in tags.go and
tags_test.go to match.

Signed-off-by: Charlie Tonneslan <cst0520@gmail.com>
@c-tonneslan

Copy link
Copy Markdown
Author

Good point, done. Dropped the aliases and renamed the internal call sites in tags.go and tags_test.go.

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.

Unexported error sentinel values

2 participants