저는 올해(2022년) 실제로 Golang을 사용하여 프로그래밍을 시작했고, 즉시 한 일은 프로젝트 구조를 발전시키는 가장 좋은 방법에 대한 참고 자료를 찾는 것이었습니다. 이 게시물은 동일한 주제에 대해 이야기하는 다른 많은 게시물 중 하나일 뿐이므로 아마도 이것이 제가 이 게시물을 쓰기로 결정한 이유일 것입니다.
첫째, golang은 폴더/패키지를 처리하는 방식이 이미 완전히 다릅니다. 개선하기 위해 Golang은 무언가를 수행하는 "고웨이(goway)" 방식이 무엇인지 알려주는 많은 공식 문서와 함께 매우 독선적인 본질을 가지고 있습니다(전체 내가 만지지 않는 것) 하지만 파일과 폴더를 구성하는 방식에는 실제로 방향이 없기 때문에 이 부분에 대해 모두가 자신의 세계에 대한 해석을 제공합니다.
이 게시물을 3개의 참고 자료로 나눈 다음 이러한 참고 자료의 혼합이 프로젝트에서 어떻게 나타나는지 보여 드리겠습니다.
작동하는 단순한 시스템에서 변함없이 작동하는 복잡한 시스템이 진화했습니다.
-- 갈의 법칙
작은 애플리케이션의 경우 프로젝트 구조가 단순해야 합니다.
"커뮤니티"에서는 Go 생태계에서 흔히 볼 수 있는 일련의 역사적 및 새로운 디자인 레이아웃 패턴에 대한 설문 조사를 수행했습니다. 이 설문 조사에는 멋진 내용이 많이 있지만 제가 주목한 것은 /cmd 및 /internal 폴더였습니다. .
/cmd
각 애플리케이션의 디렉터리 이름은 갖고 싶은 실행 파일의 이름(예: /cmd/myapp)과 일치해야 합니다.
세 번째 참고자료
결과
cmd에는 참조 프로젝트에서 알 수 있듯이 tuttipet 폴더가 없습니다. 처음에는 제안된 패턴을 사용하려고 했지만 이 API는 이미 명령줄 인터페이스와 테라폼 공급자가 함께 나왔기 때문에 이대로 두기로 결정했습니다.
코어를 빠르게 확대해 보세요. 여기서는 단순하게 생각하고 폴더를 만들지 않으려고 노력합니다. 나는 외부 세계(main.go)와의 단 하나의 접촉 지점만 유지합니다. 일반화된 것은 모두 자체 파일을 갖고, 그렇지 않은 것은 모두 해당 컨텍스트 내에 남아 있습니다.
tuttipet.New(짧고 간결하며 연상적임)를 사용하면 "더티" 레이어가 유스케이스와 상호 작용할 수 있습니다(인터랙터보다 유스케이스라는 단어를 더 쉽게 동화할 수 있습니다)
세부사항을 빠르게 확대해 보세요. 도메인이 성공할 수 있는 도구는 다음과 같습니다.
결론
요약하자면, 가능하면 단순하게 유지하려고 노력하다가 너무 복잡해지면... 처음부터 다시 시작하겠습니다.
기타 참고자료
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
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3