开发规范
git建议提交规范
feat
增加功能fix
修复问题/BUGstyle
代码风格相关无影响运行结果的perf
优化/性能提升refactor
重构revert
撤销修改test
测试相关docs
文档/注释chore
依赖更新/脚手架配置修改等workflow
工作流改进ci
持续集成types
类型定义文件更改wip
开发中test
测试用例,包括单元测试、集成测试等
命名规范
- 文件名:全部小写,除单元测试外,不使用_或-
- 私有变量名:驼峰命名,见名知义,首先英文,首字母小写,尽量避免[数字 _ -]。
- 函数、常量、公开变量名:驼峰式命名,可公开访问的的必须首字母大写
- 在for,if等循环或分支时,推荐单字母命名来标识参数
项目设计
- 项目需求讲解完后需求进行前后端设计
- 设计内容可包括概念、模型、接口、重点逻辑/流程、架构等
- 输出为md文件,可引用外部地方链接、图片。如接口可在yapi中。md可导出pdf、作图建议使用plantuml
- 项目中需要新增修改数据库表(含mysql、mongodb、es等)时,需要与基础服务小组进行沟通。
基础服务小组主要负责架构设计、数据库模型管理、基础能力、中台项目开发等。
单元测试
- 项目开始过程要进行单元测试编写、提测前进行帽烟测试
- 业务逻辑层必须写单元测试
- 覆盖所有对外提供的业务方法,建议和单元测试一一对应
- 输入和输出建议做成对应数组,方便批量执行测试
- api接口层单元测试,可使用postman、yapi、apifox等工具进行
代码走查
- 项目提测前后进行代码走查,走查表
- 由项目负责人、其他开发成员进行走查
- 走查参考以下接口表格进行
| 事项 | 考虑 | 实现 | 事项 | 考虑 | 实现 | 事项 | 考虑 | 实现 | 事项 | 考虑 | 实现 |
| :--- | --- | --- | :--- | --- | --- | :--- | --- | --- | :--- | --- | --- |
| 1.接口参数校验 | ✅ | ✅ | 2.新旧接口兼容 | - | - | 3.扩展性 | - | - | 4.防重提交处理 | ✅ | ✅ |
| 5.重点接口,线程池 | - | - | 6.第三方接口异常、超时处理 | - | - | 7.高并发下熔断和降级处理 | - | - | 8.关键代码日志记录 | - | - |
| 9.功能单一性 | - | - | 10.高并发场景,异步设计 | - | - | 11.高耗时,串行改并行 | - | - | 12.接口合并,批量处理接口 | - | - |
| 13.高性能,适当使用缓存 | - | - | 14.高性能,冷热数据分离 | - | - | 15.可变化需求,参数化适配 | - | - | 16.接口幂等性 | - | - |
| 17.读写分离,主从延时 | - | - | 18.接口返回数据,量大需要分页 | - | - | 19.SQL优化 | - | - | 20.代码锁的粒度 | - | - |
| 21.接口状态、错误明确 | ✅ | ✅ | 22.接口异常处理 | ✅ | ✅ | 23.优化程序逻辑 | - | - | 24.注意大文件、大事务、大对象 对系统资源的耗用 | - | - |
| 25.高访问接口限流 | - | - | 26.运行时异常处理(空值、下标越界等) | - | - | 27.接口安全性 | ✅ | ✅ | 28.分布式事务保障 | - | - |
| 29.事务失效处理 | - | - | 30.使用设计模式 | - | - | 31.考虑线性安全 | - | - | 32.接口定义清晰易懂,命名规范 | ✅ | ✅ |
| 33.接口的版本控制 | - | - | 34.代码规范 | ✅ | ✅ | 35.接口正确性 | ✅ | ✅ | 36.接口设计沟通(后端、前端) | - | - |
| 37.map读写问题 | - | - | | | | | | | | | |
其他
配置文件使用json、yaml,优选使用yaml(精简了引号、括号,增加注释、复用,新一代配置文件标准)
makefile文件编写,便于开发、编译、单元测试检查
样例:
#首行.PHONY命令忽略之前执行命令的结果
.PHONY: all clean test check lint cover build_mac build_liniux build_win help
#定义变量
BIN_MAC_FILE=./bin/gotest_mac
BIN_LINUX_FILE=./bin/gotest
BIN_WIN_FILE=./bin/gotest.exe
#执行所有动作
all:clean check cover build_mac build_liniux build_win
#清理动作
clean:
go clean
rm -f ./bin/*
#格式化动作
check:
go fmt ./
go vet ./
go fix ./
#跑静态分析
lint:
golangci-lint run --enable-all
#跑单元测试
test:
go test ./...
#跑统计单元测试覆盖率
cover:
go test ./... -coverprofile xx.out
go tool cover -html=xx.out
#跑编译mac目标文件
build_mac:
export GOOS=drawin
export GOARCH=amd64
go build -ldflags="-s -w" -o ${BIN_MAC_FILE} ./main.go
#跑编译linux目标文件
build_liniux:
export GOOS=linux
export GOARCH=amd64
go build -ldflags="-s -w" -o ${BIN_LINUX_FILE} ./main.go
#跑编译linux目标文件
build_win:
export GOOS=windows
export GOARCH=amd64
go build -ldflags="-s -w" -o ${BIN_WIN_FILE} ./main.go
#显示帮助
help:
@echo "make all 执行清理、静态检查、单元测试、单元测试覆盖统计、打包、制作Docker镜像"
@echo "make clean 清理"
@echo "make check vet代码静态检查"
@echo "make lint lint代码静态检查"
@echo "make test 单元测试"
@echo "make cover 单元测试"
@echo "make buildmac 编译Mac可执行文件"
@echo "make buildlinux 编译Linux可执行文件"
make windows安装,可使用:Mingw-w64 下载解压然后加入环境变量(复制出来一个make.exe)。 或者使用git自带的加入环境变量(在安装目录找到对应bin目录)。
- dockerfile、deploy 后续完善