我是陌无崖,专注于Golang高级开发,微服务,消息队列
导语
当我们还是小白,我们在写代码的时候,总会为了省事,就什么代码都写在一个文件里,如果一个文件不够,分两个,没有一个很好的规范性,最终的结果可能是这样的
image
在一个包中充斥着各种文件,过了一段时间,如果想要看看这里面的代码,变得无从下手。今天我就给大家说说在用Golang语言写代码时该如何正确的进行分类。当然其它语言部分适用。
分包前我们应该懂什么
一、配置(conf)
这一层是对我们的基础配置文件的一个存储,比如我们的存储库mysql,需要设置mysql连接地址,最大连接数、密码、数据库名字等,我们将这些转换成配置文件中的变量。我们需要使用的时候,只需要加载到一个实体中就可以了,为什么要这样做,在大型程序中,我们的代码一旦上线后如果要更换数据库,或者添加数据库,最好的做法就是不用修改我们的运行代码,我们只需要从服务器中找到相应的配置文件进行修改就可以了,这样代码运行时会自动读取到新的连接。而相反,如果我们直接将这些写进代码中,想想一旦你要修改,你需要修改的不仅仅是一个文件,或许很多文件中相关的代码都要进行修改。因此这一层我们叫它基础配置层。这一层文件经常用到的就是json或者yml格式的文件,下面是一个yml格式的例子
image
二、实例化配置(config)
上面说到了我们的一个conf包存放配置文件,那么对这些配置文件进行实例化便需要config这个包。在config包中我们对配置文件进行一个接口的设置和结构体的设置,比如mysql中
image
用这个结构体实现接口中的方法。同时我们可以在这个包中添加一个初始化我们实体的一个函数,即将配置文件中的数据存储到相应的结构体中。
三、模型层(model)
这里面是我们实体类的数据库操作层,这一层将实例化一个模型和服务接口,然后暴露给业务逻辑层进行使用,因此我们同样需要定义接口和结构体,比如说在一个用户服务中,有一个需求是根据姓名进行登录,我们可以先定义接口如下:
image
然后定义一个结构体服务模型去实现里面的方法
image
这里需要注意的是在Golang中如果结构体名字首字母小写代表私有类,里面的属性不能直接调用,因此我们可以定义一个获取的方法。在这个方法中细心的小伙伴会看出来我返回的是一个接口,这样做的目的一方面保护我们实体,同时可以以后方便实现多态。
image
那么如果我们想要使用这里面的方法,就必须初始化我们的服务模型,然后就可以用获取服务的函数获取到相应的模型服务。
image
业务逻辑层(handler)
在这一层中的代码主要是暴露我们的代码在外部,当然在实际应用中我们是将这些服务进行了服务注册,这一层我们将会使用到model层中服务,这里以RPC进行讲解,我们都知道在使用rpc远程调用之前,我们需要将我们的服务代码进行注册,因此可以将这部分写进这个包如,当由外部请求到达时首先便会到这个函数实现业务逻辑,然后进行数据的返回。
image
这样我们的基础业务便写完了,但是对于网络请求中如何将请求正确映射到我们的后台服务呢?
web层接入
如果你看过我之前的micro系列的文章,你会很轻松的解决这个问题,在micro中提供了web层的处理,只要开启一个Web服务就可以达到目的了。如果不会的,可以看看我之前的文章,首先需要创建一个服务
image
注册接口
image
handler实现
image
End:现在找一个业务进行联系吧。获取更多知识分享,欢迎文章末尾微信关注。
推荐阅读
- 开发环境搭建(持续更新中)
- RabbitMQ系列笔记介绍篇
- Golang中Modle包的使用
- goriila context深入学习笔记
- Go Context深入学习笔记
- 基于Nginx和Consul构建高可用及自动发现的Docker服务架构
- 关于log日志的深入学习笔记
本文欢迎转载,转载请联系作者,谢谢!
- 公众号【常更新】:陌无崖
- GitHub:https://github.com/yuwe1
- 博客地址【定期更新】:https://mowuya.cn/
打开微信扫一扫,关注微信公众号
网友评论