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

news2024/11/27 12:47:17

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

指导思想

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

项目重要程度

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

核心项目

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

Golang版本

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

分层架构:DDD

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

服务框架:Kratos

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

请添加图片描述

流量控制:限流器

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

请添加图片描述

接口定义: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的选择可以更加自由。

实验性项目

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/665058.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytest 自动化学习

一 pytest简介与安装 def inc(x): return x1 def test_answer(): assert inc(3) 5 #判断 4会不会等5 二 Pytest 命令规则 三 pycharm配置与界面化运行 四 pytest测试用例结构 用例结构 三部分构成 1.用例名称用例步骤 2.编辑 3.断言…

Docker 进入容器和交换文件

1、进入容器 有些时候需要进入容器进行操作,使用 docker exec 命令,这个命令后面可以添加很多参数,我们这里只讲添加 -i 和 -it 参数。 只添加 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示…

人工智能第2章基于图的知识表示与图搜索技术(课后部分习题答案)

解:用四元组(f,w,s,g)表示状态,其中 f 表示猎人,w 表示狼, s 表示羊,g 表示草,其中每个元素都可以为 0 或 1,表示在左案, …

chatgpt赋能python:Python将图片转换为代码的顶级SEO文章

Python将图片转换为代码的顶级SEO文章 在当今数字化的世界中,图像和代码都是最为重要的元素之一。Python作为一种流行的编程语言,可以帮助我们将这两种元素结合起来,让我们从图像中提取出代码。本文将讨论Python如何将图像转换为代码&#x…

哈工大计算机网络传输层协议详解之:TCP协议

哈工大计算机网络传输层协议详解之:TCP协议 文章目录 哈工大计算机网络传输层协议详解之:TCP协议TCP概述TCP段结构序列号和ACKTCP可靠数据传输RTT和超时TCP发送方事件TCP发送端程序伪代码TCP重传示例TCP接收方 ACK生成TCP快速重传机制 TCP流量控制TCP连接…

总结905

今日已做: 1.核聚课程 2.进步本回顾,重做8道题,有两道还没掌握,记录3页。 3.线性代数第5讲 4.三大计算,刷题15道,纠错。 5.每日长难句。 6.考研常识课 明日必做 1.熟练背诵《the king’s speech》并默写 2…

chatgpt赋能python:Python抽卡:让你的游戏更充实

Python抽卡:让你的游戏更充实 作为一款流行的游戏,抽卡是许多玩家最喜欢的功能之一。通过不断的抽卡,你可以获取到更加强大的角色和装备,从而在游戏中获得更多的胜利。但是,手动抽卡需要耗费大量的时间和精力&#xf…

简要介绍 | 点云距离度量:从原理到应用

注1:本文系“简要介绍”系列之一,仅从概念上对点云距离度量进行非常简要的介绍,不适合用于深入和详细的了解。 点云距离度量:从原理到应用 3D deep learning on Point cloud 1. 背景介绍 点云数据在计算机图形学、计算机视觉、自…

C#探索之路(9):深入理解C#代码编译的过程以及原理

C#探索之路(9):深入理解C#代码编译的过程以及原理 文章目录 C#探索之路(9):深入理解C#代码编译的过程以及原理一、前言:概念解析1、编译器:2、JIT是什么?3、AOT是什么?4、如何理解这个“基于运行时”的概念…

Shell 脚本和编程

shell脚本和编程 Shel基础概念 Shell是一种命令行解释器,是Linux系统中最常用的命令行界面。Shell脚本是由一系列Shell命令组成的文本文件,可以用来自动化执行Linux系统上的任务。Shell脚本是一种强大的工具,可以通过编写脚本来实现自动化运…

FPGA XDMA 中断模式实现 PCIE X8 测速试验 提供工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案XDMA简介XDMA中断模式QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利:工程代码的获取 1、前言 PCIE(PCI Express)采用了目前业内流行的点对点串行连接&#xf…

Unity 之 最新原生广告Ads接入 -- 助力增长游戏收益

Unity 之 最新Ads原生广告接入流程详解和工具类分享 一,注册 Unity Ads 广告 SDK二,下载 Unity Ads 广告 SDK三,配置 Unity Ads 广告 SDK3.1 广告位展示流程3.2 代码初始化 四,集成 Unity Ads 广告 SDK4.1 相关介绍4.2 代码分享 五…

开发日记-凌鲨中数据库代理的实现

凌鲨定位于连接研发过程中一切信息和工具。下面是数据库代理的大概框架: 技术选型 使用golang开发各种数据库协议代理,redis-proxy,mysql-proxy,mongo-proxy使用swagger提供代理协议的调试 选型原因 我们的客户端使用了tauri作为框架,在实现扩展功能的…

基于阴影检测和平衡亮度差阴影消除算法的MATLAB完整程序分享

完整代码: clc; clear; close all; warning off; addpath(genpath(pwd)); I=imread(1.png);%%此处导入自己需要检测的图片 [x,y,z]=size(I); figure(Name,Processing Steps),subplot(3,2,1), imshow(I),title(Image 1: Original Image); I=uint8(I); temp1=I; half_intens…

MySQL优化--MVCC

目录 概念 MVCC的具体实现 隐式字段 undo log日志 概念 undo log版本链 readview 接上文,redo log保证了事务的持久性,undo log 保证了事务的原子性和一致性 那,隔离性是如何保证的呢? 锁:排他锁(如…

Linux下Redis 存储

命令使用 目录 命令使用 RDB持久化 AOF持久化 yum安装 [rootlocalhost ~]# yum -y install redis 已加载插件:fastestmirror Loading mirror speeds from cached hostfile* c7-media: * epel: ftp.yz.yamagata-u.ac.jpvim到文件etc/redis.conf 取消注释requirep…

Paddle lite 初识与简单使用

一、何为Paddle lite 官方解释如下: Paddle Lite是飞桨基于Paddle Mobile全新升级推出的端侧推理引擎,在多硬件、多平台以及硬件混合调度的支持上更加完备,为包括手机在内的端侧场景的AI应用提供高效轻量的推理能力,有效解决手机…

Android——事务处理(十二)

1. 事件处理简介 1.1 知识点 (1)了解事件处理的作用; (2)了解常用的事件及相关处理接口; 1.2 具体内容 在android当中,基本上每一个组件都有用相应的事件处理,但是不过有多少种事…

chatgpt赋能python:Python抢单软件:如何优化SEO?

Python抢单软件:如何优化SEO? 导言 随着互联网技术的飞速发展,越来越多的人开始关注SEO(Search Engine Optimization)技术。而对于Python编程工程师来说,了解SEO技术也是非常重要的。那么,如何…

day10 伪操作与混合编程

伪操作 伪操作:不会生成代码,只是在编译之前告诉编译器怎么编译 .global symbol 将symbol声明成全局符号.local symbol 将symbol声明成局部符号.equ DATA, 0xFFMOV R1, #DATA.macro FUNCMOV R1, #1MOV R2, #2.endmFUNC.if 0MOV R1, #1MOV R2, #2.endif…