项目结构

    1. .
    2. ├── Dockerfile
    3. ├── LICENSE
    4. ├── Makefile
    5. ├── README.md
    6. ├── api // 下面维护了微服务使用的proto文件以及根据它们所生成的go文件
    7. └── helloworld
    8. └── v1
    9. ├── error_reason.pb.go
    10. ├── error_reason.proto
    11. ├── error_reason.swagger.json
    12. ├── greeter.pb.go
    13. ├── greeter.proto
    14. ├── greeter.swagger.json
    15. ├── greeter_grpc.pb.go
    16. └── greeter_http.pb.go
    17. ├── cmd // 整个项目启动的入口文件
    18. └── server
    19. ├── wire.go // 我们使用wire来维护依赖注入
    20. └── wire_gen.go
    21. ├── configs // 这里通常维护一些本地调试用的样例配置文件
    22. └── config.yaml
    23. ├── generate.go
    24. ├── go.mod
    25. ├── go.sum
    26. ├── internal // 该服务所有不对外暴露的代码,通常的业务逻辑都在这下面,使用internal避免错误引用
    27. ├── biz // 业务逻辑的组装层,类似 DDD 的 domain 层,data 类似 DDD 的 repo,而 repo 接口在这里定义,使用依赖倒置的原则。
    28. ├── README.md
    29. ├── biz.go
    30. └── greeter.go
    31. ├── conf // 内部使用的config的结构定义,使用proto格式生成
    32. ├── conf.pb.go
    33. └── conf.proto
    34. ├── data // 业务数据访问,包含 cache、db 等封装,实现了 biz 的 repo 接口。我们可能会把 data 与 dao 混淆在一起,data 偏重业务的含义,它所要做的是将领域对象重新拿出来,我们去掉了 DDD 的 infra层。
    35. ├── README.md
    36. ├── data.go
    37. ├── grpc.go
    38. ├── http.go
    39. └── server.go
    40. └── service // 实现了 api 定义的服务层,类似 DDD 的 application 层,处理 DTO 到 biz 领域实体的转换(DTO -> DO),同时协同各类 biz 交互,但是不应处理复杂逻辑
    41. ├── README.md
    42. ├── greeter.go
    43. └── service.go
    44. └── third_party // api 依赖的第三方proto
    45. ├── README.md
    46. ├── google
    47. └── api
    48. ├── annotations.proto
    49. ├── http.proto
    50. └── httpbody.proto
    51. └── validate
    52. ├── README.md
    53. └── validate.proto