go 기반 오픈소스인 Argo CD에 기여하기 위해 PR을 날리자, 깃허브 액션 lint 테스트에서 다음과 같이 실패하게 되었습니다.
에러 코드를 보니 golangci-lint와 gofumpt로 go의 컨벤션을 지키고 있는듯해서, 로컬에서도 이를 설치해 테스트를 완료한 뒤 커밋을 해야겠다는 생각이 들었습니다.
golangci란?
golangci-lint
는 Go 프로젝트에서 여러 lint 도구들을 통합하여 동시에 실행할 수 있는 다중 Linter입니다.
주요 Linter들:
gofmt
: 코드 포매팅을 확인합니다.go vet
: 코드에서 잠재적인 오류를 찾아냅니다.staticcheck
: 코드에서 비효율적인 부분을 검사합니다.errcheck
: 오류를 확인하지 않은 부분을 찾아냅니다.ineffassign
: 비효율적으로 할당된 변수를 찾아냅니다.
Gofumpt란?
먼저 golangci-lint를 다음과 같이 설치해줍니다.
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sudo sh -s -- -b /usr/local/bin\
이제 제 코드에 golangci-lint run
을 실행해봅니다.
"File is not gofumpt
-ed"라는 에러가 발생하는 이유는 해당 파일이 gofumpt
스타일 규칙을 따르지 않아서입니다.
따라서 gofumpt를 이용해 포맷팅을 해주어야 합니다.
gofumpt는 brew를 이용해 설치해주었습니다.
brew install gofumpt
그리고 gofumpt -w cmd.go
명령어를 실행해 포맷팅을 해줍니다.
포맷팅을 하면 파일이 자동으로 바뀌고, git diff
명령어로 다음과 같이 변경사항이 생긴 것을 볼 수 있습니다.
이제 다시 golangci-lint run으로 확인해보면, 문제가 발생하지 않는 것을 확인할 수 있습니다.
이렇게 오늘은 go의 lint와 포맷팅 도구를 알아보았습니다.
go언어로 제작된 오픈 소스를 개발할 때는 필수적으로 설치해두어야할 것 같네요 ☺️
'♾️Language & Framework > 🐿️Golang' 카테고리의 다른 글
[Trouble Shooting] - DCO 오류 해결 (with. git rebase) (0) | 2024.09.27 |
---|---|
[Go] - golang 에러처리에 대한 고민과 opaque 에러로 똑똑하게 처리하기 (1) | 2024.02.29 |
[Go] - Golang으로 사용자 작성 패키지 import 하는 방법 (1) | 2024.01.25 |
[Go] - 리눅스 환경에 Golang 설치 후 사용해보기 (0) | 2024.01.02 |