"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > GO — 프로젝트 구조

GO — 프로젝트 구조

2024-07-30에 게시됨
검색:731

저는 올해(2022년) 실제로 Golang을 사용하여 프로그래밍을 시작했고, 즉시 한 일은 프로젝트 구조를 발전시키는 가장 좋은 방법에 대한 참고 자료를 찾는 것이었습니다. 이 게시물은 동일한 주제에 대해 이야기하는 다른 많은 게시물 중 하나일 뿐이므로 아마도 이것이 제가 이 게시물을 쓰기로 결정한 이유일 것입니다.

첫째, golang은 폴더/패키지를 처리하는 방식이 이미 완전히 다릅니다. 개선하기 위해 Golang은 무언가를 수행하는 "고웨이(goway)" 방식이 무엇인지 알려주는 많은 공식 문서와 함께 매우 독선적인 본질을 가지고 있습니다(전체 내가 만지지 않는 것) 하지만 파일과 폴더를 구성하는 방식에는 실제로 방향이 없기 때문에 이 부분에 대해 모두가 자신의 세계에 대한 해석을 제공합니다.

이 게시물을 3개의 참고 자료로 나눈 다음 이러한 참고 자료의 혼합이 프로젝트에서 어떻게 나타나는지 보여 드리겠습니다.

첫 번째 참조

작동하는 단순한 시스템에서 변함없이 작동하는 복잡한 시스템이 진화했습니다.
-- 갈의 법칙

작은 애플리케이션의 경우 프로젝트 구조가 단순해야 합니다.

Imagem para um projeto simples com tudo na raiz


https://innovation.enova.com/gophercon-2018-how-do-you-structure-your-go-apps/

두 번째 참조

"커뮤니티"에서는 Go 생태계에서 흔히 볼 수 있는 일련의 역사적 및 새로운 디자인 레이아웃 패턴에 대한 설문 조사를 수행했습니다. 이 설문 조사에는 멋진 내용이 많이 있지만 제가 주목한 것은 /cmd 및 /internal 폴더였습니다. .

/cmd

이 프로젝트의 주요 애플리케이션입니다.

각 애플리케이션의 디렉터리 이름은 갖고 싶은 실행 파일의 이름(예: /cmd/myapp)과 일치해야 합니다.

/내부

비공개 애플리케이션 및 라이브러리 코드. 이는 다른 사람이 자신의 애플리케이션이나 라이브러리로 가져오는 것을 원하지 않는 코드입니다. 이 레이아웃 패턴은 Go 컴파일러 자체에 의해 적용됩니다.

세 번째 참고자료

실제로 가치를 제공하는 것과 "세부 사항"을 더 효과적으로 분리하는 아키텍처입니다.

GO — Estrutura de projetos


결과

간단한 애플리케이션의 경우 단순하게 유지하려고 노력하지만 범위가 조금 더 커지면 "코어"/도메인과 세부/인프라를 약간 구별하려고 노력합니다.

GO — Estrutura de projetos


cmd에는 참조 프로젝트에서 알 수 있듯이 tuttipet 폴더가 없습니다. 처음에는 제안된 패턴을 사용하려고 했지만 이 API는 이미 명령줄 인터페이스와 테라폼 공급자가 함께 나왔기 때문에 이대로 두기로 결정했습니다.

GO — Estrutura de projetos


코어를 빠르게 확대해 보세요. 여기서는 단순하게 생각하고 폴더를 만들지 않으려고 노력합니다. 나는 외부 세계(main.go)와의 단 하나의 접촉 지점만 유지합니다. 일반화된 것은 모두 자체 파일을 갖고, 그렇지 않은 것은 모두 해당 컨텍스트 내에 남아 있습니다.

GO — Estrutura de projetos


tuttipet.New(짧고 간결하며 연상적임)를 사용하면 "더티" 레이어가 유스케이스와 상호 작용할 수 있습니다(인터랙터보다 유스케이스라는 단어를 더 쉽게 동화할 수 있습니다)

GO — Estrutura de projetos


세부사항을 빠르게 확대해 보세요. 도메인이 성공할 수 있는 도구는 다음과 같습니다.

결론

저는 여전히 Golang이 제공하는 방식에 약하고 Golang으로 무엇을 할 수 있는지 알아내려고 노력하고 있습니다. 하지만 일부 작업을 수행하는 Go 방식이 마음에 들지 않더라도 꽤 괜찮은 것으로 입증되었습니다. 간단하고 견고합니다.

요약하자면, 가능하면 단순하게 유지하려고 노력하다가 너무 복잡해지면... 처음부터 다시 시작하겠습니다.

기타 참고자료

https://dev.to/booscaaa/implementando-clean-architecture-com-golang-4n0a

https://github.com/golang-standards/project-layout
https://blog.boot.dev/golang/golang-project-structure/
https://github.com/bnkamalesh/goapp
https://www.wolfe.id.au/2020/03/10/how-do-i-structure-my-go-project/
https://blog.logrocket.com/plat-structure-vs-layered-architecture-structuring-your-go-app/
https://developer20.com/how-to-structure-go-code/
https://dev.to/jinxankit/go-project-structure-and-guidelines-4ccm
https://github.com/bxcodec/go-clean-arch
https://golangexample.com/example-go-clean-architecture-folder-pattern/
https://www.calhoun.io/plat-application-structure/
https://go.dev/doc/valid_go#names
https://go.dev/blog/package-names

원본 게시물: https://medium.com/@espigah/go-layout-do-projeto-18aacce8089d

릴리스 선언문 이 기사는 https://dev.to/espigah/go-estrutura-de-projetos-1j0k?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3