本文介绍微服务核心模块,服务注册与发现。
什么是服务注册
将服务运行的IP与端口发送到服务中心注册,注册中心将运行服务的节点信息记录。
什么是服务发现
当需要调用某个服务提供的接口时,去注册中心,获取到对应服务的节点信息,发起请求调用服务。
注册中心
常用的服务注册中心有Etcd,Consul,Zookeeper等。下面分别介绍
目录结构
1 | soa |
Serivce
公共的服务定义
1 | package service |
Golang,PHP工程师
本文介绍微服务核心模块,服务注册与发现。
将服务运行的IP与端口发送到服务中心注册,注册中心将运行服务的节点信息记录。
当需要调用某个服务提供的接口时,去注册中心,获取到对应服务的节点信息,发起请求调用服务。
常用的服务注册中心有Etcd,Consul,Zookeeper等。下面分别介绍
1 | soa |
公共的服务定义
1 | package service |
因为某些原因,触发了我要深入了解下AOP。
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。扩展功能不修改源代码实现。
主要应用场景:日志记录,性能统计,安全控制,事务处理,异常处理等等。
其内在设计模式为代理模式。
垃圾回收是golang开发者需要关注的重点知识。
垃圾回收(英语:Garbage Collection,缩写为GC)是一种自动内存管理机制. 垃圾回收器(Garbage Collector)尝试回收不再被程序所需要的对象所占用的内存.
将新引用对象的计数器加一,将不引用的对象的计数器减一。
找到不可达的对象,然后做上标记。回收标记对象。因为扫描时会冻结所有的线程,执行时程序会暂停、卡顿,即Stop The World。(Dio咋瓦鲁多)
golang基于标记-清除算法进行优化,采用三色标记法。
原理
首先将程序创建的对象都标记为白色。
从root根出发扫描所有根对象,扫描所有可达的对象,标记为灰色。(root区域主要是程序运行到当前时刻的栈和全局数据区域。)
从灰色对象中找到其引用对象,把灰色对象本身标记为黑色。
监视对象中的内存修改,并重复上一步骤,知道灰色标记的对象不存在。
此时,GC回收白色对象。
最后将所有黑色标记的对象重置为白色。
三色标记法如何避免Stop the world的?
因为三色标记法结束后仅剩黑色与白色对象。如果不碰触黑色对象,只清除白色对象,则不会影响程序的执行。故清除操作可以和用户程序并发执行。
针对新生成的对象,go采用了写屏障
保证该对象不会被立刻清除。简单理解就是新生成的对象,一律被标记为灰色。
说实话我对原理的理解还是很生硬,仅记住三色标记法的原理。
本文介绍golang中枚举的使用。
是一组命名的常数,常量值可以是连续的,也可以是断续的。
Golang中并没有真正的枚举类型,往往都是自己定义常量,当作枚举类型来使用。
下面以订单状态来举例说明go中枚举类型的使用方式。
1 | type OrderState uint |
对于枚举常量,我们时常也需要展示类型的名称,如展示订单状态名称
1 | var ( |
检查枚举是否合法
1 | // IsValid 检查枚举是否合法 |
本文介绍通过go实现常见的排序算法。
虽然go的内置sort包实现了相关排序算法,但是我们要了解其原理,通过自己实现一次,加深印象。
1 | // BubbleSort 冒泡排序 |
1 | import ( |
1 | [1 10 35 36 55 61 89] |
本文介绍一些关于微服务架构设计的相关知识点。
每个微服务都可以运行在自己的进程里;一系列独立运行的服务共同构建起了整个系统;每个服务为独立的业务开发,一个微服务一般完成某个特定的功能,比如订单管理,用户管理等;微服务之间通过一些轻量级的通信机制进行通信,例如通过REST API或者RPC的方式进行调用
本文介绍再golang中通过gorm对mysql的操作。
Golang写的,开发人员友好的ORM库。官方地址:
http://gorm.book.jasperxu.com/
.
1 | go get -u github.com/jinzhu/gorm |
1 | // 创建数据库 |
1 | // Connection 创建数据库连接 |
本文介绍github.com/go-playground/validator/v10
的用法。
在项目中经常对客户端发起的接口请求参数进行校验,通常开发者必须自己编写一套验证的规则,但是使用统一的数据验证器能减轻开发者的负担,以及简化代码。
程序员并不是偷懒,而是提高自己的效率。
1 | go get github.com/go-playground/validator/v10 |
required 必填项
对于请求参数来说,使用的最多的就是必填项。数字0,空string、slices,map,pointer,interface,channel,function都会校验不通过。
1 | import "github.com/go-playground/validator/v10" |
输出错误信息,说明校验都未通过:
1 | function:Key: '' Error:Field validation for '' failed on the 'required' tag |
其他校验
1 | func main() { |
本文介绍gin的一些知识点,如自定义Response,中间件等。
Gin 是一个 go 写的 web 框架,具有高性能的优点。
初级的使用方式不介绍了,具体请查阅官方文档。官方地址:https://github.com/gin-gonic/gin
以下介绍基于gin开发项目的一些常用模块。
每个公司都会自定义接口的数据结构。故我们需要基于Json()
自定义一个更方便好用的response
1 | // Response 数据结构体 |
封装gin.Context以自定义一些方便的方法
1 | // Wrapper include context |
使用:
1 | package main |
通过go run main.go
运行后,浏览器访问localhost:8088
介绍一些常用的中间件,如跨域、Jwt校验、请求日志等。
more >>本文介绍在golang中的日志使用方式。
1 | package main |
指定目录存储日志
1 | package main |
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true