简介

做大量的输入,通过对比、借鉴,加上自己的经验,产出一个尽可能优的方案。

开源界优秀项目的结构示例

因为最新的 Go 版本已经使用 module 作为版本依赖,所以,所有项目的 vendor 我都忽略,建议直接使用 module 来管理依赖,而且较好的解决某些库国内访问不了的问题,参考:https://studygolang.com/topics/8737

Docker

https://github.com/moby/moby

├── api      // 存放对外公开的 API 规则
├── builder  // 存放构建脚本等
├── cli      // 命令行的主要逻辑
├── cmd      // 存放可执行程序,main 包放这个目录中
├── contrib  // 存放一些有用的脚本或文件,但不是项目的核心部分
├── docs    // 存放文档
├── internal // 只在本项目使用的包(私有)
├── pkg     // 本项目以及其他项目可以使用的包(公有)
├── plugin  // 提供插件功能

Kubernetes

https://github.com/kubernetes/kubernetes

├── api
├── build  // 存放构建脚本等
├── cmd
├── docs
├── pkg
├── plugin
├── test    // 单元测试之外的测试程序、测试数据
├── third_party // 经过修改的第三方的代码

Gogs

https://github.com/gogs/gogs

├── cmd
├── conf    // 对配置进行解析
├── docker  // 存放 docker 脚本
├── models  // MVC 中的 model
├── pkg
├── public  // 静态公共资源,实际项目会将其存入 CDN
├── routes  // 路由
├── scripts // 脚本文件
├── templates // 存放模板文件
``### influxdb
https://github.com/influxdata/influxdb

├── cmd
├── docker
├── docs
├── http // 存放 HTTP Handler 等,相当于 MVC 的 Controller
├── internal
├── models
├── pkg
├── scripts
```

开源项目小结

总体上,这些优秀开源项目,没有统一一致的目录结构方式,但大体上,有一些通用的地方,这就有了** https://github.com/golang-standards/project-layout **这个项目。

标准 Go 项目布局(结构)

https://github.com/golang-standards/project-layout 项目总结了 Go 项目的布局,我们一起看看这些主要的目录。

/cmd

该目录用于存放 Go 项目的入口,即 main.main。一般来说,我们应该在 cmd 目录下创建子目录,子目录名称代表可执行程序的名称。上面列出的优秀开源项目基本上遵循了这一规则。
事实上,Go 语言本身,以及 github.com/golang/tools 都采用了 cmd 及其子目录的形式,所以咱们的项目没有理由不使用。
一般来说,该目录中的代码应该尽可能少。

/internal

这是 Go 包的一个特性,放在该包中的代码,表明只希望项目内部使用,是项目或库私有的,其他项目或库不能使用。

/pkg

该包可以和 internal 对应,是公开的。一般来说,放在该包的代码应该和具体业务无关,方便本项目和其他项目重用。当你决定将代码放入该包时,你应该对其负责,因为别人很可能使用它。
因为 GOPATH 中有一个目录就是 pkg,所以,社区有些人对该目录不太能接受。但不管怎么样,开源界有很多优秀项目在使用它,这里有一些使用它的项目列表:
https://github.com/golang-standards/project-layout/blob/master/pkg/README.md

/api

该目录用来存放 OpenAPI/Swagger 规则说明, JSON 格式定义, 协议定义文件等。也有可能用来存放具体的对外公开 API,比如 Docker:https://github.com/moby/moby/tree/master/api/server 。

/init

存放随着系统自动启动脚本,如:systemd, upstart, sysv;或者通过 supervisor 进行进程管理的脚本。

/scripts

存放 build、install、analysis 等操作脚本。这些脚本使得项目根目录的 Makefile 很简洁。

/build

该目录用于存放打包和持续集成相关脚本。

/test

一般用来存放除单元测试、基准测试之外的测试,比如集成测试、测试数据等。

Go 语言源码仓库中就有 test 目录。

/docs

存放设计和用户文档

/tools

存放项目的支持工具。

/third_party

从第三代码包抽取过来的。根据官方建议,包名不应该有 _,所以本人不建议使用。真有这样的需要,考虑命名为 thirdparty。

转载于:https://www.cnblogs.com/Paul-watermelon/p/11230197.html

Go-项目结构和代码组织相关推荐

  1. 各类Python项目的项目结构及代码组织最佳实践

    1. 了解Python项目文件组织结构非常重要 为什么要掌握pythob项目结构? 优秀的程序员都使用规范的项目代码结构,了解这些好的习惯方式,能帮助你快速读懂代码 如果项目是几个人合作开发,好的代码 ...

  2. python实现红警三录像文件读取与自动分析生成流程图信息——二、项目结构与代码初步介绍

    总目录 一.简介 二.项目结构与代码初步介绍 三.拓展给mod使用 ======================= 大爽歌作,made by big shuang ================== ...

  3. web.xml文件位于web项目的目录结构中的_看完这篇,别人的开源项目结构应该能看懂了...

    我为什么要写这篇 近来,和不少初学Spring或Spring Boot的小伙伴私信交流了关于项目目录结构划分和代码分层的问题. 很多小伙伴表示网上下载下来的开源项目看不懂,项目结构和代码分层看得很蒙, ...

  4. 常见开源项目结构划分

    (转载自 CodeSheep 程序羊) 我为什么要写这篇 近来,和不少初学Spring或Spring Boot的小伙伴私信交流了关于项目目录结构划分和代码分层的问题. 很多小伙伴表示网上下载下来的开源 ...

  5. 看完这篇,别人的开源项目结构应该能看懂了

    我为什么要写这篇 近来,和不少初学Spring或Spring Boot的小伙伴私信交流了关于项目目录结构划分和代码分层的问题. 很多小伙伴表示网上下载下来的开源项目看不懂,项目结构和代码分层看得很蒙, ...

  6. 在阿里工作5年了,看完这篇,别人的开源项目结构应该能看懂了

    很多小伙伴表示网上下载下来的开源项目看不懂,项目结构和代码分层看得很蒙,不知道应该以一个什么样的思路去学习和吸收别人的项目. 好,今天熬夜肝了这篇文章,和大家一起来交流探讨一下,不足之处也请小伙伴们批 ...

  7. 【Lilishop商城】No2-1.确定项目结构和数据结构(用户、商品、订单、促销等模块)

    仅涉及后端,全部目录看顶部专栏,代码.文档.接口路径在: [Lilishop商城]记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 首先先看一下项目的开发架构,都需要哪些技术,都按 ...

  8. 代码重构之旅(一) 项目结构

    起因 之前说过自己被分配了一个重构代码的任务: 这是一个有6.7年历史,多人经手的老系统,PHP 语言,分布在50台机器上运行.代码使用最简单的结构,没有使用任何完整框架,甚至有三四千行代码的文件,修 ...

  9. Maven笔记(2)-- 常用命令和标准的Maven项目结构

    http://www.cnblogs.com/luxh/archive/2012/11/06/2757441.html 1.常用命令 1)创建一个Project mvn archetype:gener ...

最新文章

  1. 2017浅谈面试(一)
  2. 四舍五入到小数点后两位[重复]
  3. 吴恩达的 AI 战略强调了什么?
  4. [Ubuntu] 解决 pip 安装 lxml 出现 x86_64-linux-gnu-gcc 异常
  5. php listview,ListView简单实用
  6. 《四世同堂》金句摘抄(九)
  7. 关于数据权限的几个问题
  8. Error: Loading chunk * failed,Vue Router懒加载报错问题解决方案
  9. mysql 时间戳与java_在Java中处理MySQL日期时间和时间戳
  10. 【前端】h5音乐播放demo 可关闭可播放
  11. R语言|ggtreeExtra包绘制进化树
  12. java 授课录像_讲课视频录制方法,录制上课录像详细步骤
  13. 排列组合思维导图_图形推理 思维导图 百度文库
  14. PDF转PNG高清不失帧
  15. 苹果地图副总裁_挖角苹果高级计算机视觉专家 Mapillary地图更新添一员大将
  16. 星火计划 | Apache InLong一站式大数据接入平台沙龙火热报名中
  17. DDoS 攻击防御方法
  18. js 正则知识汇总(转)
  19. echarts实现中国地图的下钻和返回上一级
  20. 数据结构与算法笔记:抽象思维之对比算法,发现共性(下楼梯台阶和象棋跳马问题算法重构)

热门文章

  1. attr和prop的区别
  2. Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
  3. Ajax请求利用jsonp实现跨域
  4. Java并发编程--理解ThreadLocal
  5. 有空研究这篇http://blog.csdn.net/studyvcmfc/article/details/7720258 研究后写篇记录
  6. 华中地区高校第七届ACM程序设计大赛——之字形矩阵【2012年5月27日】
  7. Oracle 11g 新特性 -- 自适应游标共享(Adaptive Cursor Sharing: ACS) 说明
  8. c#反混淆工具de4dot 一般混淆都可以解决
  9. 几个常用算法的适应场景及其优缺点
  10. pip国内加载速度慢解决方法