etc/memo

Golang Project Layout Study

uyt8989 2022. 7. 19. 02:59

최근 우연히 go를 열심히 사용해야 할 일이 생겼다. 기왕 하는 거 무지성으로 하는 게 아니라 완성도 있는 프로젝트를 만들고 싶다는 생각이 들었다. 코드는 클린 코드 책을 보면서 열심히 깔끔한 코드를 작성하려고 노력하는 중이다. 함수 내의 추상화 레벨 맞추는 게 쉽지 않아서 애를 먹고 있다. 그런데 프로젝트 레이아웃을 깔끔하게 잡는 것도 쉽지 않았다. 그냥 비슷한 코드끼리 뭉쳐놓으면 되지 않나 싶은데 직접 해보려고 하면 잘 되지 않아서 아무래도 뭐라도 참고하는 게 좋을 것 같았다. 막상 레퍼런스를 찾으려고 보니까 적당한 프로젝트를 찾는 것도 쉽지 않았다. 이런 걸 찾아본 적이 있어야지. 그래도 두고두고 보면 도움이 될 것 같은 링크를 몇 개 찾았다.

1.표준 Go 프로젝트 레이아웃 문서

 

GitHub - golang-standards/project-layout: Standard Go Project Layout

Standard Go Project Layout. Contribute to golang-standards/project-layout development by creating an account on GitHub.

github.com

한국어로 되어 있는 것까지는 좋은데, 내용이 이해가 잘 안 된다. 좀 딱딱한 번역체라서 그런가. 여러 번 읽어야 이해할 수 있을 것 같다. 이 안에 있는 링크도 몇개 들어가봤는데 좋은 정보가 많은 것 같다. 

 

Go Project Layout

You went through the ‘Tour of Go’, played with https://play.golang.org/ and you feel you are ready to write some code. Great! However, you…

medium.com

여러 문서 중에서 가장 이해하기 좋았던 문서는 이거였다. 지금하는 프로젝트에서 pkg 디렉토리를 쓸까 말까 엄청 고민했었는데, 이걸 보고 그냥 안 쓰기로 결정했다.

 

2. Trending Go Repository

 

GitHub: Where the world builds software

GitHub is where over 83 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and feat...

github.com

실제로 다른 사람들은 어떻게 프로젝트를 짰나 궁금해서 검색해봤다. 아무래도 스타가 별로 없는 코드보다는 많은 레포지토리가 조금 더 정답에 가까운 코드일 것 같아서 우선 스타, 포크가 많은 프로젝트부터 살펴봤다. 물론 위의 레이아웃을 지킨 프로젝트도 있긴 했는데 안 지키는 프로젝트도 엄청 많았다. 내가 원하는 레이아웃은 위의 문서에서 찾는게 좋을 것 같다.

 

3. Effective Go

 

Effective Go - The Go Programming Language

Effective Go Introduction Go is a new language. Although it borrows ideas from existing languages, it has unusual properties that make effective Go programs different in character from programs written in its relatives. A straightforward translation of a C

go.dev

 

README · Effective Go in Korean

 

gosudaweb.gitbooks.io

프로젝트 레이아웃에 대한 내용은 아니지만 go 코드에 대한 이야기 할 때 꼭 빠지지 않고 등장한다. 위에는 원문이고 밑은 어떤 분이 친절하게 번역해놓으신 내용이다. 시간을 들여서 꼼꼼히 읽자. 나는 아직 go스럽다는 것이 정확히 어떤 건지 감을 못 잡은 것 같다. 우선 네이밍부터 최대한 따라해봐야겠다.

 

4. Top Repository Analysis

 

An Analysis of the Top 1000 Go Repositories · Scott Mansfield

An Analysis of the Top 1000 Go Repositories Jan 2, 2016 · 9 minute read · Comments GoGit This analysis was done from copies cloned on January 2, 2016 early morning Pacific Time. Code organization Most code is a library, so the code is organized as either

blog.sgmansfield.com

16년 글이지만 이런 분석을 하는 사람도 있구나하고 놀랐다. 진짜 멋있으신 것 같다.

 

5. Awesome Go

 

GitHub - avelino/awesome-go: A curated list of awesome Go frameworks, libraries and software

A curated list of awesome Go frameworks, libraries and software - GitHub - avelino/awesome-go: A curated list of awesome Go frameworks, libraries and software

github.com

여러 패키지를 모아놓은 레포지토리다. 진짜 너무 많아서 다 살펴보기 힘들 정도다. 이런 것도 되는구나 싶은 패키지도 많다. 근데 실제로 잘 짜진 패키지인지는 검증이 필요해보인다.