만쥬의 개발일기

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언어로 제작된 오픈 소스를 개발할 때는 필수적으로 설치해두어야할 것 같네요 ☺️

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!