创建Go工程化项目布局详解

2022-09-27 16:58:54
目录
正文/cmd/internal/pkg/docs,/example,/pkg,/third_parth,/tools基础库项目布局kit包应该具备的特点应用程序项目布局/api/configs/test不应该包含/src目录/internal/biz/data/service布局示意图数据流向

正文

如果你尝试学习Go,或者你正在为自己建立一个Poc或者一个玩具项目,这个项目布局是没有啥必要的,从一些简单的事情开始(一个main文件绰绰有余)。当有更多的人参与这个项目的时候,你讲需要更多的结构,包括需要一个tookit来方便生成项目的模板,尽可能大家统一的工程目录布局

本文章围绕github.com/golang-stan…>

/cmd

本项目的主干。>

不要在这个项目中放置太多的代码,如果你认为代码导入并在其他项目中使用,那么他应该位于/pkg目录中,如果代码不是可重用的,或者你不希望其他人重用他,请将该代码放到/internal目录中。

/internal

不希望对外进行共享的代码,internal目录中也可以放置一些子包结构,已做到更加细化的切分,如:

|--internal
|   |
|   |--demo
|       |--biz
|       |--data
|       |--service

/pkg

外部应用程序可以使用的代码库,(例如:/pkg/publiclib)其他项目会导入这些代码库,所以放入到该目录下的代码要三思~注意:/internal目录是确保私有包不可导入的私有方法,因为他是由Go在编译时强制执行的。/pkg>

/pkg目录内可以参考GO标准库的组织形式,按照功能分类,/internal/pkg一般用于项目内的,跨多个应用的公共共享代码,但是其作用域仅在单个工程内。

|--pkg
|  |
|  |--cache
|  |   |--memcache
|  |   |--redis
|  |
|  |--conf
|      |--dsn
|      |--env
|      |--flagvar
|      |--paladin

/docs,/example,/pkg,/third_parth,/tools

这些跟上文说的/pkg/internal都同属根目录下的目录结构

    /docs>/example 放置一些项目的使用示例/thrid_parth 三方的一些依赖文件,如:idl文件/tools 放置一些项目的脚手架工具,代码生成工具等

    基础库项目布局

    每个公司都应该为不同的微服务建立一个统一的kit基础包工具集。>

    kit包应该具备的特点

      统一标准库方式布局高度抽象支持插件

      例如下面的布局

      |--cache
      |    |--memcache
      |         |--test
      |    |--redis
      |         |--test
      |--conf
      |    |--dsn
      |    |--env 
      |    |--flagvar
      |    |--paladin
      |          |--apollo
      |               |--internal
      |                     |--mockserver
      |--container
      |    |--group
      |    |--pool
      |    |--queue
      |         |--aqm
      |--database
      |    |--hbase
      |    |--sql
      |    |--tidb
      |--echo
      |    |--types
      |--log
      |    |--internal
      |         |--core
      |         |--filewriter
      |
      

      应用程序项目布局

      /api

      API协议定义目录,>

      /configs

      配置文件模板或者默认配置

      /test

      额外的外部测试应用程序和测试数据,你可以随时根据需求构造测试目录,对于较大的项目,有一个数据子目录是有意义的,例如你可以使用/test/testdata(如果你需要忽略目录中的内容)请注意,Go还会以“.”或者“_”开头的目录或者文件,因此在如何命名测试数据目录方便,有着很大的灵活性。

      不应该包含/src目录

      有些Go项目确实有src目录,这是因为开发人员通常有Java的开发背景。

      /internal

      /biz

      业务逻辑的组装层,类似DDD中的domain,

      /data

      业务数据访问,包含cache和db等封装,实现了biz的repo接口,我们可能会把data和dao混合在一起,data偏重业务的含义,他所做的是将领域对象重新拿出来,我们去掉了DDD的infra层,

      /service

      实现了api定义的服务层,类似DDD的applocation层,处理DTO到biz领域实体的转换,(DTO->DO)同事协同个类biz交互,但是不应该处理复杂逻辑

      布局示意图

      |--api
      |--configs
      |--test
      |--internal
      |       |--biz
      |       |--data
      |       |--service
      

      数据流向

      以上就是创建Go工程化项目布局详解的详细内容,更多关于Go工程化项目布局的资料请关注易采站长站其它相关文章!