Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Cover image for Go - The Ultimate Folder Structure
Ayoub Ali
Ayoub Ali

Posted on

     

Go - The Ultimate Folder Structure

Go - The Ultimate Folder Structure

Organizing your Go (Golang) project's folder structure can help improve code readability, maintainability, and scalability. While there is no one-size-fits-all structure, here's a common folder structure for a Go project:

The Common Structure

project/├──cmd/├──your-app-name/├──main.go#Applicationentrypoint└──...#Otherapplication-specificfiles└──another-app/├──main.go#Anotherapplicationentrypoint└──...├──internal/#Privateapplicationandpackagecode├──config/├──config.go#Configurationlogic└──...├──database/├──database.go#Databasesetupandaccess└──...└──...├──pkg/#Public,reusablepackages├──mypackage/├──mypackage.go#Publicpackagecode└──...└──...├──api/#API-relatedcode(e.g.,RESTorgRPC)├──handler/├──handler.go#HTTPrequesthandlers└──...├──middleware/├──middleware.go#MiddlewareforHTTPrequests└──...└──...├──web/#Front-endwebapplicationassets├──static/├──css/├──js/└──...└──templates/├──index.html└──...├──scripts/#Build,deployment,andmaintenancescripts├──build.sh├──deploy.sh└──...├──configs/#Configurationfilesfordifferentenvironments├──development.yaml├──production.yaml└──...├──tests/#Unitandintegrationtests├──unit/├──...└──integration/├──...├──docs/#Projectdocumentation├──.gitignore#Gitignorefile├──go.mod#Gomodulefile├──go.sum#Gomoduledependenciesfile└──README.md#ProjectREADME
Enter fullscreen modeExit fullscreen mode

1.Flat Structure:

In smaller projects, you might opt for a flat structure where all your Go source files reside in the project root directory. This approach is simple but may become hard to manage as the project grows.

project-root/├──main.go├──handler.go├──config.go├──database.go├──...├──static/├──templates/├──scripts/├──configs/├──tests/└──docs/
Enter fullscreen modeExit fullscreen mode

2.Layered Structure:

Organize your code into layers, such as "web," "api," and "data." This approach helps separate concerns.

project/├──main.go├──web/├──handler.go├──static/├──templates/├──api/├──routes.go├──middleware/├──data/├──database.go├──repository.go├──configs/├──tests/├──docs/
Enter fullscreen modeExit fullscreen mode

3.Domain-Driven Design (DDD):

In larger applications, consider structuring your project based on domain-driven design principles. Each domain has its own directory.

project/├──cmd/├──app1/├──app2/├──internal/├──auth/├──handler.go├──service.go├──orders/├──handler.go├──service.go├──...├──pkg/├──utility/├──...├──...├──api/├──app1/├──...├──app2/├──...├──web/├──app1/├──...├──app2/├──...├──scripts/├──configs/├──tests/└──docs/
Enter fullscreen modeExit fullscreen mode

4.Clean Architecture:

You can adopt a clean architecture approach, which emphasizes a separation of concerns between different layers of your application.

project/├──cmd/├──your-app/├──main.go├──internal/├──app/├──handler.go├──service.go├──domain/├──model.go├──repository.go├──pkg/├──utility/├──...├──api/├──...├──web/├──...├──scripts/├──configs/├──tests/└──docs/
Enter fullscreen modeExit fullscreen mode

5.Modular Structure:

Organize your code into separate modules, each with its own directory structure. This approach can be useful when developing multiple independent components within a single project.

project/├──module1/├──cmd/├──internal/├──pkg/├──api/├──web/├──scripts/├──configs/├──tests/└──docs/├──module2/├──...
Enter fullscreen modeExit fullscreen mode

Use based on Your need

Gist

Top comments(2)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss
CollapseExpand
 
lil5 profile image
Lucian I. Last
  • Joined
CollapseExpand
 
ayoubzulfiqar profile image
Ayoub Ali
AI Engineer | Programmer | Security Researcher

In Your Opinion, You are right actually. and I have looked into you repo "The Clothing Loop" It's a fully fledge website and The design system that you choose make perfect sense. My in my case I Write tools and API Bots, basically Backend stuff. and I choose different folder structure based on requirment. But I agree with You..

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

AI Engineer | Programmer | Security Researcher
  • Work
    Freelancer - Looking for Opportunities
  • Joined

More fromAyoub Ali

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp