去 - 终极文件夹结构
#初学者 #生产率 #go #discuss

去 - 终极文件夹结构

组织您的GO(Golang)项目的文件夹结构可以帮助提高代码可读性,可维护性和可扩展性。虽然没有一种适合所有结构的结构,但这是GO项目的通用文件夹结构:

共同的结构

project/
    ├── cmd/
       ├── your-app-name/
          ├── main.go         # Application entry point
          └── ...             # Other application-specific files
       └── another-app/
           ├── main.go         # Another application entry point
           └── ...
    ├── internal/                # Private application and package code
       ├── config/
          ├── config.go       # Configuration logic
          └── ...
       ├── database/
          ├── database.go     # Database setup and access
          └── ...
       └── ...
    ├── pkg/                     # Public, reusable packages
       ├── mypackage/
          ├── mypackage.go    # Public package code
          └── ...
       └── ...
    ├── api/                     # API-related code (e.g., REST or gRPC)
       ├── handler/
          ├── handler.go      # HTTP request handlers
          └── ...
       ├── middleware/
          ├── middleware.go  # Middleware for HTTP requests
          └── ...
       └── ...
    ├── web/                     # Front-end web application assets
       ├── static/
          ├── css/
          ├── js/
          └── ...
       └── templates/
           ├── index.html
           └── ...
    ├── scripts/                 # Build, deployment, and maintenance scripts
       ├── build.sh
       ├── deploy.sh
       └── ...
    ├── configs/                 # Configuration files for different environments
       ├── development.yaml
       ├── production.yaml
       └── ...
    ├── tests/                   # Unit and integration tests
       ├── unit/
          ├── ...
       └── integration/
           ├── ...
    ├── docs/                    # Project documentation
    ├── .gitignore               # Gitignore file
    ├── go.mod                   # Go module file
    ├── go.sum                   # Go module dependencies file
    └── README.md                # Project README

1. 平坦结构

在较小的项目中,您可以选择一个平坦的结构,其中所有GO源文件都位于项目根目录中。这种方法很简单,但随着项目的增长可能很难管理。

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

2. 分层结构

将您的代码组织成层,例如“ Web”,“ API”和“数据”。这种方法有助于分开关注。

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

3. 域驱动设计(DDD)

在较大的应用程序中,考虑基于域驱动的设计原理来构建项目。每个域都有自己的目录。

   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/

4. 干净的体系结构

您可以采用一种干净的体系结构方法,该方法强调了应用程序不同层之间的关注点。

   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/

5. 模块化结构

将代码整理到单独的模块中,每个模块都有自己的目录结构。在单个项目中开发多个独立组件时,这种方法可能很有用。

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

根据您的需求使用

Gist