| **NOTE:** Golint is [deprecated and frozen](https://github.com/golang/go/issues/38968). |
| There's no drop-in replacement for it, but tools such as [Staticcheck](https://staticcheck.io/) |
| and `go vet` should be used instead. |
| |
| Golint is a linter for Go source code. |
| |
| [](https://pkg.go.dev/golang.org/x/lint) |
| [](https://travis-ci.org/golang/lint) |
| |
| ## Installation |
| |
| Golint requires a |
| [supported release of Go](https://golang.org/doc/devel/release.html#policy). |
| |
| go get -u golang.org/x/lint/golint |
| |
| To find out where `golint` was installed you can run `go list -f {{.Target}} golang.org/x/lint/golint`. For `golint` to be used globally add that directory to the `$PATH` environment setting. |
| |
| ## Usage |
| |
| Invoke `golint` with one or more filenames, directories, or packages named |
| by its import path. Golint uses the same |
| [import path syntax](https://golang.org/cmd/go/#hdr-Import_path_syntax) as |
| the `go` command and therefore |
| also supports relative import paths like `./...`. Additionally the `...` |
| wildcard can be used as suffix on relative and absolute file paths to recurse |
| into them. |
| |
| The output of this tool is a list of suggestions in Vim quickfix format, |
| which is accepted by lots of different editors. |
| |
| ## Purpose |
| |
| Golint differs from gofmt. Gofmt reformats Go source code, whereas |
| golint prints out style mistakes. |
| |
| Golint differs from govet. Govet is concerned with correctness, whereas |
| golint is concerned with coding style. Golint is in use at Google, and it |
| seeks to match the accepted style of the open source Go project. |
| |
| The suggestions made by golint are exactly that: suggestions. |
| Golint is not perfect, and has both false positives and false negatives. |
| Do not treat its output as a gold standard. We will not be adding pragmas |
| or other knobs to suppress specific warnings, so do not expect or require |
| code to be completely "lint-free". |
| In short, this tool is not, and will never be, trustworthy enough for its |
| suggestions to be enforced automatically, for example as part of a build process. |
| Golint makes suggestions for many of the mechanically checkable items listed in |
| [Effective Go](https://golang.org/doc/effective_go.html) and the |
| [CodeReviewComments wiki page](https://golang.org/wiki/CodeReviewComments). |
| |
| ## Scope |
| |
| Golint is meant to carry out the stylistic conventions put forth in |
| [Effective Go](https://golang.org/doc/effective_go.html) and |
| [CodeReviewComments](https://golang.org/wiki/CodeReviewComments). |
| Changes that are not aligned with those documents will not be considered. |
| |
| ## Vim |
| |
| Add this to your ~/.vimrc: |
| |
| set rtp+=$GOPATH/src/golang.org/x/lint/misc/vim |
| |
| If you have multiple entries in your GOPATH, replace `$GOPATH` with the right value. |
| |
| Running `:Lint` will run golint on the current file and populate the quickfix list. |
| |
| Optionally, add this to your `~/.vimrc` to automatically run `golint` on `:w` |
| |
| autocmd BufWritePost,FileWritePost *.go execute 'Lint' | cwindow |
| |
| |
| ## Emacs |
| |
| Add this to your `.emacs` file: |
| |
| (add-to-list 'load-path (concat (getenv "GOPATH") "/src/golang.org/x/lint/misc/emacs/")) |
| (require 'golint) |
| |
| If you have multiple entries in your GOPATH, replace `$GOPATH` with the right value. |
| |
| Running M-x golint will run golint on the current file. |
| |
| For more usage, see [Compilation-Mode](http://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation-Mode.html). |