go 微服务框架_清晰架构(Clean Architecture)的Go微服务
更新
我最进对这个框架进行了重大升级,虽然所做的改动不大,但成效显著。这次更新修复了旧框架中的所有主要问题,尽管它的的主要项目结构和接口都没有改变,具体改动内容请参见清晰架构(Clean Architecture)的Go微服务—重大升级。 现在它几乎拥有了我理想框架中的所有内容。它是一个轻量级的框架,但功能强大,并且还是可插拔的。我写了如下4篇文章来讲述新的框架。
- "一个可以自我进化的微服务框架"
- "一个非侵入的Go事务管理库——如何使用"
- "一个非侵入的Go事务管理库——工作原理"
- 清晰架构(Clean Architecture)的Go微服务—重大升级
如果你想上一个新的项目,那么我建议你从新的框架开始。至于我写的讲述旧的框架的文章大部分仍然有效。在新的框架中有三种模式,从简单到复杂。旧的框架是基于第三种模式的,是最复杂的。由于新的文章只覆盖了新的内容,旧的文章仍然需要阅读。至于阅读顺序,是先读新的还是先读旧的到关系不大,如果你没有读过任何一篇,那么你可以从新的入手,再读旧的。如果你已经读了旧的,那么再读新的,可能会对整个脉络比较清晰。如果有些文章中有一些不一致的地方,那么以新的文章为准。改动比较多的是事务管理和日志管理,程序结构也有一些小的改动。
原文
我用Go和gRPC创建了一个微服务项目,并试图找出最好的程序结构,它可以作为我其他项目的模板。我还将程序设计和编程的最佳实践应用于Go Microservice程序,例如清晰架构(Clean Architecture),依赖注入(Dependency Injection),日志记录,错误处理等。我有Java背景,并发现自己在Java和Go之间挣扎,它们之间的编程理念完全不同。我写了一系列关于在项目工作中做出的设计决策和取舍的文章。
阅读这些文章不需要熟悉Go,但如果你有Go基础绝对会有帮助。如果你不会Go并且无法确定文章中的代码在做什么,那么你需要从这里Go by Example¹(你不必完成里面的所有主题,只需要前面几个)学习一些基本的Go。本系列中的“事务支持”涉及到数据库,需要Go中的一些数据库知识,你可以从Go database / sql tutorial获取它²。如果你对Go Microservice编程感兴趣并思考和关心代码设计,程序结构,编码风格,日志记录,事务管理和依赖注入,那么这个系列非常适合你。
本系列的侧重点?
本系列不是关于如何快速创建程序原型,而是关于如何进行良好的程序设计使之能适应将来的变化。例如,你可能希望将一个服务的部分功能拆分为单独的微服务,或添加事务支持,或切换到更好的日志记录器,但不想更改代码中的每个日志记录语句。运用此项目中的程序设计,在进行上述更改时不会触及业务逻辑代码。你甚至很少更改任何现有代码(容器代码除外),多数时候只添加新代码,因此QA工作量大大减少。你可以使用此程序作为下一个微服务应用的基础框架,省去了从头开始的麻烦。你唯一需要做的就是熟悉本框架的内部结构。如果你有Spring(Java)背景或来自面向对象的经历,或者知道清晰架构(Clean Architecture)或SOLID (面向对象设计),那么这些代码应该对你很熟悉。
你无需按以下顺序阅读文章。 如果你熟悉清晰架构(Clean Architecture)³或SOLID (面向对象设计)⁴,你可以按任意顺序阅读文章而不会有任何问题。 但我还是建议你至少先读完第一篇,它将为你提供整个项目的概述,然后你可以选择后面的任何一篇的文章。
- 清晰架构(Clean Architecture)的Go微服务: 程序结构
- 清晰架构(Clean Architecture)的Go微服务: 程序设计
- 清晰架构(Clean Architecture)的Go微服务: 设计原则
- 清晰架构(Clean Architecture)的Go微服务: 编码风格
- 清晰架构(Clean Architecture)的Go微服务: 事物管理
- 清晰架构(Clean Architecture)的Go微服务: 日志管理
- 清晰架构(Clean Architecture)的Go微服务: 程序容器(Application Container)
- 清晰架构(Clean Architecture)的Go微服务: 依赖注入(Dependency Injection)
源程序:
完整的源程序链接 github: https://github.com/jfeng45/servicetmpl
索引:
[1] Go by Example
[2] Go database/sql tutorial
[3]The Clean Code Blog
[4] S.O.L.I.D is for the first five object-oriented design (OOD) principles introduced by Robert C. Martin, popularly known as Uncle Bob and the acronym is introduced later by Michael Feathers
go 微服务框架_清晰架构(Clean Architecture)的Go微服务相关推荐
- net微服务框架/c#/netcore微服务框架,一个轻量级的.Net 5.0微服务开发框架,同时也适用于单体架构系统的开发
net微服务框架/c#/netcore微服务框架,一个轻量级的.Net 5.0微服务开发框架,同时也适用于单体架构系统的开发. 支持经典三层与DDD架构开发模式.集成了一系列主流稳定的微服务配套技术栈 ...
- python微服务框架_微服务架构框架有哪些?常用微服务架构介绍
小伙伴们知道常用的微服务架构框架有哪些吗?上回我们介绍了一些常用的微服务架构设计模式,这次我们就来了解一下一些常用的微服务架构框架吧. 一.Dubbo Dubbo框架是由阿里巴巴开发的开源式的分布式服 ...
- c# 微服务学习_资深架构师学习笔记:什么是微服务?
们先来看看为什么要考虑使用微服务. 构建单体应用 我们假设,您开始开发一个打车应用,打算与 Uber 和 Hailo 竞争.经过初步交流和需求收集,您开始手动或者使用类似 Rails.Spring B ...
- lagom的微服务框架_微服务有麻烦吗? Lagom在这里为您提供帮助。 试试吧!
lagom的微服务框架 蛋糕支持. 我们很自豪地宣布,新的Apache许可的微服务框架Lagom可在GitHub上使用 ! 当其他框架专注于打包和实例启动时,Lagom重新定义了Java开发人员构建基 ...
- 单体 soa 微服务 区别_每日一读-从单体到微服务,这些年架构的演变
写在前面的话 Stay Hungry Stay Foolish!!! 每天进步一点点!!! <每日一读>是博主每日学习的一篇文章所记录的笔记,大多数是提取文章中关键内容而成:文章类型不限, ...
- golang微服务框架go-zero系列-1:适合创业的golang微服务框架go-zero + 金光灿灿的gorm V2实践
为什么使用go-zero 可以有第三个选择 golang圈子不大,微服务框架框架屈指可数:除了go-micro.go-kit,几乎没有其他选择.go-zero为此提供第三个可能. go-micro 对 ...
- 阿里分布式服务框架Dubbo的架构总结
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...
- emq的客户端与服务端_使用 EMQ X Cloud 物联网 MQTT 云服务
使用 EMQ X Cloud 物联网 MQTT 云服务 2020-09-01 摘要 在数分钟内创建全托管高可用 MQTT 集群,快速接入物联网设备并立即开始产品原型设计与应用开发,将物联网数据存储到华 ...
- 微服务团队_为什么团队文化对于成功的微服务至关重要
微服务团队 by Jake Lumetta 杰克·卢米塔(Jake Lumetta) 为什么团队文化对于成功的微服务至关重要 (Why Team Culture is Critical for Suc ...
最新文章
- 基于希克斯需求价格弹性计算_Serverless弹性伸缩的现状调研(超详细)
- 牛逼!二维码会被人类扫完吗?疫情期间用掉了1400亿个!
- Arduino教程资料汇总(8月22日悄悄跟新了一下)
- 再见了Spring Cloud!这个架构有点厉害,甚至干掉了Dubbo!
- 记录在Ubuntu14.04上安装ryu中遇到的各种坑
- 洛谷 P1636 Einstein学画画
- CSDN在文章头部添加目录
- tensorflow的一些函数
- springboot 设置server.port不失效原因
- [Java网络编程基础]InetAddress的使用
- 北海市计算机等级考试,2021上半年北海市计算机二级报名时间|网上报名入口【已开通】...
- OculusQuest2 直接连电脑调试
- 深度讲解 Python 四大常用绘图库的“绘图原理”
- 指针函数的一个范例,在单片机上运用它能让您的程序结构更明朗清晰,层次感强...
- AD RMS高可用(二)为rms群集服务器申请证书
- matlab角度和弧度的互换_MATLAB弧度与角度转换 -
- php判断手机号码归属地,手机号码归属查询大全所在位置(PHP通过API获取手机号码归属地)...
- 魔兽 怎么查服务器在线人数,网易魔兽世界人口普查查看
- 大数据存储引擎-bigstore
- 无法打开位置服务器,电脑的定位功能无法打开怎么办?
热门文章
- 小米2s自带rec刷root_刷Magisk模块开机卡Logo了怎么办?两种方法教你轻松解决
- sqlite 数据量_向SQLite批量导入csv,txt数据
- (二十七)【2021 WWW】Learning Intents behind Interactions with Knowledge Graph for Recommendation
- 李宏毅机器学习(八)自编码器(Auto-encoder)
- 图谱实战 | 安全领域知识图谱建设与典型应用场景总结
- 会议交流 | DataFunCon 线上大会 - 知识图谱专题论坛
- 技术动态 | ACL 2019 知识图谱的全方位总结
- 郑杰 | 如何拿回我们自己的医疗数据?
- 剑指offer-python解答
- Java基础语法之Map