开发规范

git建议提交规范

  • feat 增加功能
  • fix 修复问题/BUG
  • style 代码风格相关无影响运行结果的
  • 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 后续完善
jianyu360 all right reserved,powered by Gitbook修改时间: 2022-06-23 15:43:07

results matching ""

    No results matching ""