自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 Golang 设计模式之代理模式

代理模式在实际开发中非常有用,尤其是在需要控制对象的访问、进行缓存、延迟加载或进行安全控制的场景下。ProxyImage 类:也是 Image 的实现类,但它作为 RealImage 的代理,控制 RealImage 的访问。main 函数:展示了使用代理模式进行图片加载的过程,第一次调用 Display 方法时会加载图片,之后的调用则不会再次加载。控制对象访问:代理模式允许你控制对实际对象的访问,提供额外的功能(如缓存、权限检查)。权限控制:代理模式可以控制对象的访问权限,确保只有合法用户才能访问资源。

2024-09-06 10:11:15 1062

原创 Golang 设计模式之适配器模式

在这个图中,客户端通过 OldPaymentSystem 接口与系统交互,适配器 PaymentAdapter 实现了 OldPaymentSystem 的接口,并将其请求转发给新版的 NewPaymentSystem,从而实现了兼容性。适配器模式 通过转换一个类的接口,使得它能够与客户端期望的接口兼容,从而解决了接口不兼容的问题。NewPaymentSystem 结构体:这是新的支付系统,它的接口与旧系统不同,使用 MakePayment 方法来处理支付。适配器模式让原本接口不兼容的类可以合作无间。

2024-09-06 10:06:29 1026

原创 Golang 设计模式之外观模式

外观模式 提供了一种简化复杂子系统交互的方式,通过引入外观类,隐藏了系统内部的复杂性,降低了客户端与多个子系统之间的耦合度。外观模式通过引入一个外观类(Facade),隐藏了子系统的复杂性,简化了系统的使用。可能引入新的复杂性:虽然外观模式简化了客户端与子系统的交互,但如果外观类过于复杂,可能会带来新的复杂性。通过外观模式,客户端不需要知道系统内部的细节,只需要通过外观接口与系统交互,避免与子系统直接耦合。降低耦合:客户端与子系统的依赖关系减少,客户端只需要与外观类交互,降低了系统的耦合度。

2024-09-06 09:59:44 926

原创 Golang 设计模式之单例模式

是一种创建型设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点来获取该实例。单例模式在应用程序中是很常见的,特别是当你需要一个全局的唯一实例来协调系统中的一些共享资源时。单例模式 是一种简单而有效的设计模式,通过确保一个类只有一个实例,并提供全局访问点来获取该实例,从而管理系统中的全局状态。instance 和 once:instance 是 Logger 的唯一实例,once 是 sync.Once 类型,用于确保初始化代码只执行一次。控制实例化:确保系统中只有一个实例,避免重复创建。

2024-09-05 15:13:59 566

原创 Golang 设计模式之原型模式

原型模式的核心在于通过克隆现有的原型对象来创建新对象,这种方法可以提高对象创建的效率,尤其是在对象创建成本较高的情况下。原型模式 是一种有效的创建型模式,通过克隆现有对象来创建新对象,避免了重复创建的开销。:测试 Rectangle 对象的克隆功能,确保克隆出的对象与原始对象具有相同的属性。:测试 Circle 对象的克隆功能,确保克隆出的对象与原始对象具有相同的属性。:当对象的配置是动态的,可以通过原型模式进行修改和调整,然后复制得到新的对象。简化复杂对象的创建:可以通过克隆来简化复杂对象的创建过程。

2024-09-05 15:10:37 580

原创 Golang 设计模式之创建者模式

通过将对象的构造过程与对象的表示分离,创建者模式使得我们能够一步一步地构建对象。在实际应用中,创建者模式广泛用于生成复杂对象,如配置文件、UI组件,或者涉及多步构建的对象。它为我们提供了一种灵活、清晰的对象构造方式,尤其适合对象的属性较多且组合较为复杂的场景。创建者模式 提供了一种优雅的方式来构建复杂的对象,尤其是在对象有多个可选配置的情况下。例如,在构建复杂的配置文件、创建定制化的产品对象,或者需要逐步构建对象时,创建者模式可以有效地简化这些过程。需要构建复杂的对象,且该对象由多个部分组成。

2024-09-05 15:05:00 379

原创 Golang 设计模式之抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。尽管抽象工厂模式带来了很好的模块化和扩展性,但在实际使用中也要注意工厂类的复杂度,避免引入过多的抽象层次。抽象工厂模式通过提供一组创建对象的接口,使得客户端可以通过使用这些接口来创建一系列相关的对象,而无需指定具体的类。下面是一个关于抽象工厂模式的Golang实现示例,我们将构建一个UI组件的抽象工厂,来创建不同操作系统下的按钮和文本框。

2024-09-04 11:19:39 619

原创 Golang 设计模式之简单工厂模式

简单工厂模式通常用于创建相似类型的对象,通过使用一个单一的工厂方法,客户端可以请求工厂生成一个实例,而不必知道实际的类名称。本文中,我们以图形工厂为例,展示了如何使用简单工厂模式来创建不同的几何形状对象,并通过单元测试验证了工厂的正确性。简单工厂模式是创建型设计模式中的一种,通过工厂类封装了对象的创建过程,从而将对象的创建与使用分离。测试用例确保工厂生成的对象符合预期。下面是一个关于简单工厂模式的Golang实现示例,其中我们实现了一个图形工厂来创建不同的几何形状对象(如圆形和正方形)。

2024-09-04 11:04:03 626

原创 Golang 设计模式之工厂方法模式

工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法模式在 Go 语言中可以用于多种场景,包括依赖注入、测试代码以及需要根据具体情况生成不同对象的场合。通过使用工厂方法模式,我们可以更好地管理代码的扩展性和可维护性。在 Golang 中,工厂方法模式通常用于解耦代码与特定实现之间的依赖关系,从而使代码更具可扩展性和灵活性。:不同的日志级别可能需要不同的日志记录方式。:不同类型的消息需要不同的处理器来处理。

2024-09-04 09:49:15 407 2

原创 go-micro pprof分析工具

pprof是golang程序性能分析工具,go-micro基于官方pprof做了一层封装,对网络和应用封装了一套完整的分析方法。

2022-07-25 10:13:22 220

原创 go-micro框架定义接口错误返回

go-micro为分布式系统中发生的大多数事物包括错误提供了抽象和类型。通过提供一组核心错误和定义详细错误类型的能力,我们可以始终如一地了解典型 Go 错误字符串之外发生的情况.

2022-07-22 11:00:06 301

原创 go-micro接口调用

go-micro在微服务框架中提供了开箱即用的灵活接口,但是官方文档以及版本过于混乱,导致很难上手,初次使用很多调用都需要去阅读源码才能使用,微服务之间最核心的功能就是接口调用,当你使用go-micro的微服务去调用另一个go-micro的微服务时,使用起来简单,但是如果跨语言呢,grpc是没有语言限制的,假设你用go-micro实现了一个微服务,使用java作为客户端去调用呢?本教程主要记录go-micro在跨语言上调用接口的方法,希望对你有所帮助。......

2022-07-21 16:03:01 331

原创 go-micro配置文件

Go-microconfig作为配置库,它也是动态的可插拔的。应用程序中的大多数配置都是静态配置的,或者包括从多个源加载的复杂逻辑。GoConfig使这变得简单、可插拔和合并。您再也不用以同样的方式处理配置了。.........

2022-07-20 14:04:58 546

原创 go-micro使用etcd作为注册中心

go-micro框架为服务注册发现提供了标准的接口Registry。只要实现这个接口就可以定制自己的服务注册和发现。不过官方已经为主流注册中心提供了官方的接口实现,大多数时候我们不需要从头写起。官方默认实现了mdns,consul,etcd等注册中心接口,提供了开箱即用的方法。v2以前默认使用consul作为注册中心。最新版本默认使用mDNS提供零配置的发现系统,大多数系统已经内置,程序不需要任何改动就具备服务注册和发现能力。实际生产中,官方则推荐使用etcd组成更具弹性的集群方案。简单。...

2022-07-19 10:31:08 763 1

原创 go-micro使用etcd存储配置

不管是单个服务还是微服务,读取文件在每个项目系统中是必不可少的部分。大多数项目中都是静态加载项目配置文件的,有时候可能需要从各种源中读取配置数据,这让配置读取复杂化,不易于快速开发。而go-micro中,不管是从动态读取配置,还是从多元读取配置都很简单,唯一难点就是需要读取源码来了解他的工作机制。Go-Micro支持多种源的读取,包括命令行参数、文件(json、yaml)、etcd、consul、k8s等。...

2022-07-18 12:54:11 627

原创 go-micro集成RabbitMQ实战和原理

在go-micro中异步消息的收发是通过Broker这个组件来完成的,底层实现有RabbitMQ、Kafka、Redis等等很多种方式,这篇文章主要介绍go-micro使用RabbitMQ收发数据的方法和原理。

2022-07-17 22:35:15 275

原创 proto3默认值与可选项

目前开发的产品架构采用微服务架构,微服务之间通信的消息格式则使用的proto3标准协议格式。全称ProtocolBuffers(下面简称PB)是Google公司开发的一种数据描述语言,是一种类似XML但更灵活和高效的结构化数据存储格式,可用于结构化数据的序列化,适用于数据存储、RPC数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。它支持多种语言,比如C++,Java,C#,Python,JavaScript等等。目前它的最新版本是3.18.0。使用,修改。..

2022-07-15 15:24:03 3315 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除