ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

整理一波Go工程化目录结构~

2021-07-05 11:04:17  阅读:217  来源: 互联网

标签:一波 项目 文件夹 internal pkg 根目录 Go 工程化 目录


在Go语言领域遨游了几个月后,发现自己对Go语言相关的工程目录结构有些不了解,按照原来的习惯在Go工程中建立的目录结构显得比较奇怪,好的目录结构绝对是可以加强工程效率的,所以接下来会参考煎鱼、毛大等大佬项目的结构做分析并且改造一个我的半成品项目。

每个项目的目录结构并不是有规定模板的,也有很多优秀的项目并不是常规的项目布局,还是要依据项目类型、大小及灵活程度做调整,但一定要保证结构清晰!

工程化目录

/pkg

一般来说作为外部应用程序可以使用的库代码,也即可以被其他项目引用的包。在pkg内部可以按照功能分类。所以说根目录下的pkg文件夹是作为整个项目的共享包库使用。

当然在非根目录的下也可以很好的加入pkg目录,很多项目会在internal目录下加入pkg表示内部共享包库。

/internal

大多数开源项目及官方代码等代码仓库中,我们总会在某个目录级别见到internal目录。它表示私有应用程序和库代码,也就是你不希望其他项目中导入的代码,一般存储一些比较专属于当前项目的代码包。这是在代码编译阶段就会被限制的,该目录下的代码不可被外部访问到。

internal目录并不局限在根目录,在各级子目录中也可以有internal子目录,也会同样起到作用。

/config

config目录或者configs目录顾名思义就是配置文件或者配置文件模板所在的文件夹。

/test

test目录经常用于存放整个应用的测试、测试数据及一些集成测试等,相较于单元测试在每个go文件对应的目录下,test目录偏向于整体,当然在某些子项目内也会有局部项目的测试会放在子项目的test中。

/docs

各类文档所在目录。

/third_party

可以放一些第三方的资源工具文件。


应用

项目地址:https://github.com/Codexiaoyi/tf_server

以上就是一些常见的目录,还有一些/api、/example、/cmd等等也算是比较常见的目录,目录功能也显而易见。各种类型的项目的目录结构都不同,我这还是通过一个单体的应用的常用目录结构进行举例。

可以看到当前做到一半的项目,根目录下已经变得奇奇怪怪了,尤其是util文件夹里面放了各种东西(自己都看不下去了),接下来我们来做改造~

①我们将根目录结构调整一下

②我们需要将原来的util文件夹下的jwt组件、log日志组件、oss对象工具放到pkg文件夹中,并做好与本项目的解耦。

③将原来的util文件夹下的response和errmsg这些与当前项目强耦合的包放到internal中。

这样我们的根目录就变得十分清真,后续可以再加test、docs等等目录,也不会显得项目杂乱无章。最后我们来看看新的目录结构:

通过这篇随笔可以看出在go项目中有一些“潜规则”,比如刚入门的时候我们不知道各个项目中的internal和pkg文件夹表示肾么含义,当然还是那句话,项目的目录结构并没有一个强制性规范,我们应该不断看优秀的项目的结构目录,不断优化自己的架构意识,使得自己项目的扩展性加大的同时还能保证清晰

代码是给人看的!

标签:一波,项目,文件夹,internal,pkg,根目录,Go,工程化,目录
来源: https://www.cnblogs.com/wl-blog/p/14971411.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有