golang代码规范之框架搭建规范

编写本规范的目的在于,让开发者更方便快捷地搭建项目框架,同时让团队内部的技术栈达到统一。

指导思想

框架搭建需要适应项目的变化,为项目选择最合适的架构,没有什么是一成不变的。技术架构应该是不断完善的,在满足当前需求的前提下做最大程度的设计,但不要过度设计。

项目重要程度

按照项目的重要程度,选择不同的技术栈。

核心项目

核心项目需要采用最稳妥的技术栈,搭建最完善的代码开发框架。

Golang版本

新开项目推荐golang-1.19以及上(2023.05.09推荐)

分层架构:DDD

使用DDD的思想对代码进行服务治理。

服务框架:Kratos

服务初始选择单体架构,服务框架选择Kratos,保留后期扩展为微服务的可能性。

golang代码规范之框架搭建规范_第1张图片

流量控制:限流器

在创建时应该设定全局流程控制。

golang代码规范之框架搭建规范_第2张图片

接口定义:Protocol Buffer

对外接口统一使用RestFul风格的HTTP协议,内部服务远程调用采用GRPC协议。通过编写Protocol Buffer文件定义接口文档,自动生成golang代码和swagger文件,将swagger文件导入apifox或者postman生成接口文档。

依赖注入:Wire

使用wire实现依赖注入。

数据库

操作数据库时,涉及多个增删改查操作,需要使用数据库事务。

关系型数据库:MySQL+Ent

当业务逻辑复杂,业务之间的关系联系较为紧密时,数据库用关系型数据库,关系型数据库首选MySQL。使用Ent作为ORM框架与MySQL数据库进行数据交互。

非关系型数据库:MongoDB

当业务的主要对象是文档对象时,业务之间的联系比较简单时,数据库用非关系型数据库,非关系型数据库首选MongoDB。

缓存:Redis

缓存数据库首选Redis。

搜索引擎:Elasticsearch

搜索引擎使用ElasticSearch,使用自动定时同步和手动同步结合的方式更新ES中的数据。

代码检查:GIt-Hooks+golangci-lint

在git commit之前,通过git hooks触发代码检查。代码检查使用golangci-lint工具。

gitignore

需要定义好gitignore,将程序能够自动生成的以及本地调试文件加入ignore列表。

makefile

使用makefile构建项目。

项目部署

项目必须包含用于构建镜像的Dockerfile。如果使用docker部署,应该有docker-compose文件。如果使用K8s部署,则需要包含ConfigMap、Deployment、Secret、Service等yaml文件。

重要项目

重要项目的搭建原则与核心项目几乎一致。

一般项目

可以使用Gin框架快速开发,略过DDD,略过代码自动检查,可以省去限流器,数据库与ORM的选择可以更加自由。

实验性项目

可以自由选择开发框架,有更多的创新性和自由度。

你可能感兴趣的:(go,golang,代码规范,架构)