在学习了字节跳动青训营相关golang后端的课程之后,终于可以换个口味写后端了~ 以前一直用java springboot mybatisplus技术栈,在学习了golang之后发现golang在很多地方都有优势~ 比如没有java那样那么多的模板代码。
下面就开始实现一个资产管理系统吧~ 本系统受学校需求启发,基于Golang、Gin、Gorm、Vue等技术栈实现了一套具有上下层级流水线审批、文件查看、人员管理、资产管理等功能的系统。
项目结构
通过研究github上go项目,我大体分成了如下结构:
其中cmd是程序入口文件,如main.go。
具体流程
使用Viper获取配置文件
在配置文件导入上,使用了Viper这个库。Viper 是一个用于 Go 语言的配置管理库,它旨在帮助开发人员轻松地处理应用程序的配置信息。无论是从文件、环境变量、命令行参数还是远程配置中,Viper 都提供了一种统一的方式来读取和管理配置数据。
我们使用viper来拉取数据库配置。
连接到数据库
使用gorm来连接数据库。非常方便!
这里推荐gorm的gen库,可以一键生成数据表对应的go结构。详情请看gorm官方仓库。
设置路由
在httpconn包下,根据需求新建多个路由组:
run函数:
为什么要开两个函数?方便后期testing测试。
业务开发
前期准备完成之后,就可以开始开发业务了。根据青训营的课程知识开发基本上没有难度。需要注意的是,在service和controller层上,我使用了工厂模式。也就是说当来一个新的请求,就会新开对象。保证不同请求之间的数据剥离。
这里附上controller和service的规约: 在软件开发中,使用不同的层次来组织代码可以帮助你更好地管理和维护项目。在很多应用中,常见的代码组织方式包括 Controller 层和 Service 层。下面是一些关于这两个层次的常见规约和最佳实践:
Controller 层:
- 处理请求和响应: 控制器负责处理来自客户端的请求,并将适当的数据传递给 Service 层进行处理。同时,它还负责将 Service 层返回的数据包装成适当的响应格式返回给客户端。
- 不应包含业务逻辑: 控制器应该专注于请求的处理,而不应该包含复杂的业务逻辑。业务逻辑应该委托给 Service 层处理。
- 参数验证: 控制器应该负责验证传递给它的参数的合法性。这可以包括验证参数是否存在、格式是否正确等。
- 路由处理: 控制器通常与路由器紧密集成,负责将特定的请求路由到相应的处理函数。
Service 层:
- 封装业务逻辑: Service 层应该包含应用程序的核心业务逻辑。它将控制器的请求转化为对数据存储的操作,并且可以包含复杂的业务规则和计算。
- 不涉及请求和响应: Service 层不应该关心请求和响应的格式。它专注于处理业务逻辑,而不是处理与外部界面相关的内容。
- 数据验证和转换: Service 层可以负责对数据进行进一步验证、转换和处理,以确保数据的正确性和一致性。
- 数据访问: Service 层应该负责与数据库或其他数据存储交互,执行查询、创建、更新和删除等操作。
- 异常处理: Service 层应该捕获并处理与业务逻辑相关的异常,然后将适当的结果或错误返回给控制器。