Skip to content
This repository has been archived by the owner on May 9, 2021. It is now read-only.

Unexported Types and the "annoying to use" message #465

Closed
jpreese opened this issue Oct 1, 2019 · 2 comments
Closed

Unexported Types and the "annoying to use" message #465

jpreese opened this issue Oct 1, 2019 · 2 comments

Comments

@jpreese
Copy link

jpreese commented Oct 1, 2019

I've always been curious why the following triggers a linting error

package main

type foo struct{}

func main() {
}

// exported func Bar returns unexported type foo.foo, which can be annoying to use
func Bar() foo { 
	return foo{}
}

I've used this approach in a couple projects now, but because golint throws an error it does give me some pause. Is this frowned upon in Go?

My justification would be that I do not want users of my package to be able to create their own foo and must get their foo from Bar, because otherwise the type would be useless to them and wouldn't be used in a way that makes sense.

@schattian
Copy link

See #210

@mvdan
Copy link
Member

mvdan commented May 8, 2021

Thank you for submitting this issue! As per golang/go#38968, we are freezing and deprecating golint. There's no drop-in replacement to golint per se, but you should find that Staticcheck works well in encouraging good Go code, much like golint did in the past, since it also includes style checks. There's always gofmt and go vet too, of course.

If you would like to contribute further, I'd encourage you to engage Staticcheck's issue tracker or look at vet's open issues, as they are both actively maintained. If you have an idea that doesn't fit into either of those tools, you could look at other Go linters, or write your own - these days it's fairly straightforward with go/analysis.

To help avoid confusion, I'm closing all issues before we freeze the repository. If you have any feedback, you can leave a comment on the proposal thread where it was decided to deprecate golint - though note that the proposal has been accepted for nearly a year. Thanks!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants