预提交打印“golint:找不到命令”

Asu*_*uha 3 go pre-commit.com

环境

\n
$ go version\ngo version go1.15.2 linux/amd64\n
Run Code Online (Sandbox Code Playgroud)\n

我想要的是

\n

我想做一个用Go实现的微服务。

\n

发生了什么

\n

当我运行 git commit 时,预提交运行golint命令,现在它打印“golint:命令未找到”。

\n
asuha on asuha-HP-EliteDesk-800-G4-TWR in ~/go/src/github.com/Asuha-a/URLShortener/api/services/user(27m|feat/_20_design_backend_architecture*)\n$ git commit -m "feat: add user app #20"\ngo fmt...................................................................Passed\ngo lint..................................................................Failed\n- hook id: go-lint\n- exit code: 1\n\n/home/asuha/.cache/pre-commit/repo5ywtpl6j/run-go-lint.sh: line 7: golint: command not found\n\ngo imports...............................................................Passed\ngo-cyclo.................................................................Failed\n- hook id: go-cyclo\n- exit code: 127\n\n/home/asuha/.cache/pre-commit/repo5ywtpl6j/run-go-cyclo.sh: line 9: exec: gocyclo: not found\n\nvalidate toml........................................(no files to check)Skipped\nCheck files aren't using go's testing package........(no files to check)Skipped\ngo-unit-tests............................................................Passed\ngo-mod-tidy..............................................................Passed\n
Run Code Online (Sandbox Code Playgroud)\n

代码

\n

.zshrc 中 go 的设置

\n
export PATH=$PATH:/usr/local/go/bin\nexport GOROOT=/usr/local/go\nexport GOPATH=$HOME/go\nexport GOBIN=$GOPATH/bin\n
Run Code Online (Sandbox Code Playgroud)\n

项目树

\n
asuha on asuha-HP-EliteDesk-800-G4-TWR in ~/go/src/github.com/Asuha-a/URLShortener(43m|feat/_20_design_backend_architecture*)\n$ tree\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 api\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Dockerfile\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.sum\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.go\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pb\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 services\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 user\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.sum\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.go\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docker-compose.yml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 README.md\n
Run Code Online (Sandbox Code Playgroud)\n

gopath 中的树

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bin\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gocyclo\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 golint\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gopls\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go-test\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my-first-go\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 protoc-gen-go\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 protoc-gen-go-grpc\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 user\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pkg\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 linux_amd64\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 github.com\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mod\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cache\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cloud.google.com\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 github.com\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 golang.org\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 google.golang.org\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gopkg.in\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 honnef.co\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mvdan.cc\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 sumdb\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 sum.golang.org\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 github.com\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Asuha-a\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 fzipp\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gin-contrib\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gin-gonic\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 golang\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go-playground\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 leodido\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mattn\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ugorji\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 golang.org\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 x\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 google.golang.org\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 protobuf\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 gopkg.in\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 yaml.v2\n
Run Code Online (Sandbox Code Playgroud)\n

.pre-commit-config.yaml

\n
repos:\n- repo: git://github.com/dnephin/pre-commit-golang\n  rev: master\n  hooks:\n    - id: go-fmt\n    - id: go-lint\n    - id: go-imports\n    - id: go-cyclo\n      args: [-over=15]\n    - id: validate-toml\n    - id: no-go-testing\n    - id: go-unit-tests\n    - id: go-mod-tid\n
Run Code Online (Sandbox Code Playgroud)\n

/home/asuha/go/src/github.com/Asuha-a/URLShortener/api/go.mod

\n
module github.com/Asuha-a/URLShortener/api\n\ngo 1.15\n\nrequire (\n    github.com/fzipp/gocyclo v0.3.1 // indirect\n    github.com/gin-gonic/gin v1.6.3\n    github.com/go-playground/validator/v10 v10.4.1 // indirect\n    github.com/golang/protobuf v1.4.3 // indirect\n    github.com/json-iterator/go v1.1.10 // indirect\n    github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect\n    github.com/modern-go/reflect2 v1.0.1 // indirect\n    github.com/ugorji/go v1.1.13 // indirect\n    golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 // indirect\n    golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect\n    golang.org/x/sys v0.0.0-20201026173827-119d4633e4d1 // indirect\n    golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3 // indirect\n    google.golang.org/protobuf v1.25.0 // indirect\n    gopkg.in/yaml.v2 v2.3.0 // indirect\n)\n
Run Code Online (Sandbox Code Playgroud)\n

/home/asuha/go/src/github.com/Asuha-a/URLShortener/api/services/user/go.mod

\n
module github.com/Asuha-a/URLShortener/api/services/user\n\ngo 1.15\n\nrequire (\n    github.com/fzipp/gocyclo v0.3.1 // indirect\n    golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect\n    golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3 // indirect\n)\n
Run Code Online (Sandbox Code Playgroud)\n

我想知道什么

\n

为什么 golint 无法运行?\n如何解决?

\n

Ole*_*zov 7

您需要获取并保存对PATH环境变量的更改。如果您使用 bash,您可以将下一个更改添加到.bashrc.bash_profile(取决于操作系统)。

export GOPATH="${HOME}/go"
export GOROOT="/usr/local/opt/go/libexec"

if [[ $PATH != *$GOPATH* ]]; then
    export PATH="${GOPATH}/bin:${PATH}"
fi

if [[ $PATH != *$GOROOT* ]]; then
    export PATH="${GOROOT}/bin:${PATH}"
fi
Run Code Online (Sandbox Code Playgroud)

注意:在我的例子中存在$HOME变量,但您可以编写 gopath 的完整路径。