合订本|用Go语言实现 23 种设计模式及学习重点

Power Automate 最常用的十大场景以及解决方案 3.2 获取指定主题含有附件邮件,然后读取csv附件内容,插入数据库,调度执行存储过程,最后通过Power automate 发送paginated report 特殊格式报表给发件人。Power Automate 作为微软推出的自动化工作流工具,其适用场景非常广泛,尤其在数据库查询自动化方面能显著提升效率。2.8发送邮件,把生成csv文件当作附件,把生成html当作邮件内容在邮件boty展示。3.1 读取数据库数据,定时发送预警邮件并抄送附件和展示内容在邮件中。:已有微软产品栈,需快速实现部门级自动化。 阅读详情

今天是咱们用Go学设计模式系列的最后一期,整个系列中我带着大家一起学习了经典的23种设计模式用Go语言如何来实现,以及它们在日常工作开发中的应用场景。

我看了一下发文记录,从2022年7月18更新第一篇观察者模式,到5月22号发布了最后一种设计模式--中介者模式,一共历时10个月,发布了23篇文章。从最一开始的不准备整理成系列写到哪算哪,到中期形成自己的写作风格,有目标的去学习整理再发布,对自己来说确实算是一个小小的成就。

今天我们给系列来个收尾,跟大家谈谈写程序需要用到设计模式吗?设计模式学习的重点是什么,以及整理一下咱们这个系列分享的用Go学23种设计模式的合订本。

写程序需要用设计模式吗?

这个问题可以延伸出多个子问题,写Go程序需要用设计模式吗?写python程序需要用设计模式吗,写Java / C# 需要用设计模式吗?Java 和 C# 这种在企业领域生根发芽、枝繁叶茂多年的语言本身提供的编程接口就用了很多设计模式,所以大部分人都觉得需要。

而针对Go 或者 Python 这种秉承少即是多,在编程语言界有点特立独行的语言,他们写程序时需要用设计模式吗?

我觉得是需要的,因为设计模式的思想是通的,并且我们一直都在使用,只要咱们想让自己写的程序变得可维护、可复用、可扩展、灵活性好,那势必要遵循设计模式的六大原则的,哪些六大原则呢?咱们下部分再细说。

这里我们要谨记请勿使用其他语言的方式套用到Go语言上来实现设计模式,那样你会发现类似 JAVA 的这些面向对象语言中的某些设计模式的写法用在 Go 语法中会十分的别扭。

这也是我更新这个系列文章的目的,这两年带的团队里Java 和 Go 都在用,但是Go写出来的代码总感觉怪怪的,要不完全没设计模式摊大饼一样搞几千行,要不就硬搬Java的思路去实现。

所以我在这个系列里给设计模式写代码示例时,花了相当的篇幅给大家标出Go 和 其他面向对象语言在实现某个模式上的区别等等。这个大家可以在文章的代码讲解和注释中看到。

学习设计模式的重点

设计模式对于程序员而言并不陌生,每个程序员在编程时都会或多或少地接触到设计模式。无论是在大型程序的架构中,亦或是在源码的学习中,设计模式都扮演着非常重要的角色。

关于设计模式的态度,我相信有时候大部分人都会有这种感觉,即使按部就班地学了书上介绍的所有设计模式,在实践中也应用不好,写出来不知道它属于哪种设计模式。

这个很正常,因为在实践中,程序的作者往往是需要根据实际的上下文对模式进行变种,或者两种或者多种设计模式结合使用来设计程序的,所以从整体看你说不好它用了哪种设计模式,只能说是挑选一个视角观察程序结构,看到它在某个环节应用了某个设计模式,整个程序往往是多个模式的结合。

其实GoF 23 中列举的这些个经典的设计模式相当于是前人们为我们列举出了程序遵循的六大设计原则的各种最佳实践的示例,相当于为我们提供了一个切入点,让我们能通过它们来学习、理解、应用这六个原则。

从开始我们一直在说用设计模式的目的是让程序遵守六大原则,现在我们一起来看一下这六大原则。

设计模式基于六大原则

  • 开闭原则:一个软件实体如类、模块和函数应该对修改封闭,对扩展开放。

  • 单一职责原则:一个类只做一件事,一个类应该只有一个引起它修改的原因。

  • 里氏替换原则:子类应该可以完全替换父类。也就是说在使用继承时,只扩展新功能,而不要破坏父类原有的功能。

  • 依赖倒置原则:细节应该依赖于抽象,抽象不应依赖于细节。把抽象层放在程序设计的高层,并保持稳定,程序的细节变化由低层的实现层来完成。

  • 迪米特法则:又名「最少知道原则」,一个类不应知道自己操作的类的细节,换言之,只和朋友谈话,不和朋友的朋友谈话。

  • 接口隔离原则:客户端不应依赖它不需要的接口。如果一个接口在实现时,部分方法由于冗余被客户端空实现,则应该将接口拆分,让实现类只需依赖自己需要的接口方法。

所有设计模式的应用都是为了程序能更好的满足这六大原则。

Go 学设计模式--合订本

这里把所有设计按照大类型分类,整理成一个设计模式学习的合订本,方便从全局角度学习设计模式。

设计模式合订本

建造型

单例模式

https://mp.weixin.qq.com/s/1ZuhUA9Lt2uLFlamIY6fLQ

工厂模式

https://mp.weixin.qq.com/s/MlC6-TDf06LGpF8hxcSV_w

建造者模式

https://mp.weixin.qq.com/s/Uu3EAWpRO9pSbg1F1DLa_w

原型模式

https://mp.weixin.qq.com/s/y1qHsQNR7EWeDU5g60Loqg

结构型

代理模式

https://mp.weixin.qq.com/s/FTXkgxkUzsHMIspCK60G4w

适配器模式

https://mp.weixin.qq.com/s/r8975amH-DcJkWQKytIeJQ

装饰模式

https://mp.weixin.qq.com/s/_e9Qa97gZvgv9n-pFB4lFw

组合模式

https://mp.weixin.qq.com/s/JKWbyr4Yt7A6l1nFsANUcQ

外观模式

https://mp.weixin.qq.com/s/tC9xfZFJvcNEbTXHQYvT6w

享元模式

https://mp.weixin.qq.com/s/AZHO7R6IXFG8MguDpUNdbw

桥接模式

https://mp.weixin.qq.com/s/O8shSU46TcgFPx3h7NGFAA

行为型

观察者模式

https://mp.weixin.qq.com/s/4NqjkXVqFPamEc_QsyRipA

模版模式

https://mp.weixin.qq.com/s/-Ysho1jI9MfrAIrplzj7UQ

策略模式

https://mp.weixin.qq.com/s/IQsojcdwLZ1g0TgVQDoqVw

职责链模式

https://mp.weixin.qq.com/s/zCh12E10JM24EGTyFS7hPQ

状态模式

https://mp.weixin.qq.com/s/X9dKNO6sd-OY2VfsZpaElA

迭代器模式

https://mp.weixin.qq.com/s/sABibBRsC2kknbAH18oatA

访客模式

https://mp.weixin.qq.com/s/qsw89qI8DOXyb4C1XI5QtA

命令模式

https://mp.weixin.qq.com/s/n1R1fnRZuDwlaQqsDh5y3g

解释器模式

https://mp.weixin.qq.com/s/8v0UZWygCvkbye4Y0P-3sQ

中介者模式

https://mp.weixin.qq.com/s/91-XUm5Gn9oQLd_F4dLb3A

最后

关于设计模式的学习和写作就暂告一个段落啦,大家可以收藏这篇文章,需要的时候拿出来再看看,多多实践,内化成自己的编程内功才是王道。

设计模式系列里我讲程序结构时,用了很多UML类图,实际上UML是软件设计里单独的一个领域系统的结构分析、流程分析、功能分析、架构分析都能用UML来做。

如果设计模式这个系列的文章有帮助到你,可以随意赞赏,也欢迎大家在评论区讨论起来,据说每个人都有一个喜欢重构代码的同事,说说大家为了写好程序都干过什么吧!

DETR系列文章之–Co-DETR Co-DETR,并行训练多个辅助头,以一对多的标签分配方式进行监督从辅助头中提取正样本坐标,为解码器中的正样本的训练效率进行额外的定制化正样本query.一对一标签分配:每个GT框分配给一个特定的query(DETR),较少的正query导致低效训练,从编码器生成的潜在表示和解码器中的注意力学习分析这一问题。一对多标签分配:每个GT框分配给检测器输出的多个proposal/anchor,依赖NMS或者anchor生成(ATSS,RetinaNet,FCOS,PAA)。 阅读详情

相关推荐

LinuxMint 22.1(Ubuntu24.04)下通过Wine完美运行同花顺远航版的实战指南

本文详细介绍了在LinuxMint 22.1(Ubuntu24.04)系统下通过Wine完美运行同花顺远航版的实战指南。从基础环境准备到深度优化,包括Wine环境配置、同花顺远航版安装、字体显示调优、任务栏兼容性修复等关键步骤,帮助Linux用户高效使用同花顺远航版进行股票交易和行情分析。

weixin_30919429的博客 529

合订本|用Go语言实现23设计模式学习重点

今天是咱们用Go设计模式系列的最后一期,整个系列中我带着大家一起学习了经典的23设计模式Go语言如何来实现,以及它们在日常工作开发中的应用场景。我看了一下发文记录,从2022年7月18更新第一篇观察者模式,到5月22号发布了最后一种设计模式--中介者模式,一共历时10个月,发布了23篇文章。从最一开始的不准备整理成系列写到哪算哪,到中期形成自己的写作风格,有目标的去学习整理再发布,对自己来说...

kevin_tech的博客,微信搜「网管叨bi叨」 960

基于Django+Vue3的目标检测系统设计与实现,Web前后端分离,Vue3前台系统+Django后台管理系统开发,YOLOv11 Web目标检测,实现图片、视频和摄像头检测等功能,全网独发

基于Django+Vue3的智能目标检测系统设计与实现,Web前后端分离,YOLOv11 Web目标检测,Vue3前台系统+Django后台管理系统开发实现图片检测、视频检测、摄像头检测、登录、注册和个人中心功能

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3578

合集|用 Go 语言实现 23设计模式

今天是咱们用Go设计模式系列的最后一期,整个系列中我带着大家一起学习了经典的23设计模式Go语言如何来实现,以及它们在日常工作开发中的应用场景。我看了一下发文记录,从2022年7月18更新第一篇观察者模式,到5月22号发布了最后一种设计模式--中介者模式,一共历时10个月,发布了23篇文章。从最一开始的不准备整理成系列写到哪算哪,到中期形成自己的写作风格,有目标的去学习整理再发布,对自己来说...

slphahaha的博客 1839

<span class=“js_title_inner“>合集|用 Go 语言实现 23设计模式</span>

这个很正常,因为在实践中,程序的作者往往是需要根据实际的上下文对模式进行变种,或者两种或者多种设计模式结合使用来设计程序的,所以从整体看你说不好它用了哪种设计模式,只能说是挑选一个视角观察程序结构,看到它在某个环节应用了某个设计模式,整个程序往往是多个模式的结合。我觉得是需要的,因为设计模式的思想是通的,并且我们一直都在使用,只要咱们想让自己写的程序变得可维护、可复用、可扩展、灵活性好,那势必要遵循设计模式的六大原则的,哪些六大原则呢?也就是说在使用继承时,只扩展新功能,而不要破坏父类原有的功能。

slphahaha的博客 38

Go 后端常见权限问题完整整理

后端常见权限问题完整整理

weixin_51380508的博客 374

Go 1.27 重磅发布:泛型方法落地、json/v2 问世、后量子加密与 Goroutine 泄漏检测

Go 1.27 重磅更新摘要 Go 1.27 正式发布,带来多项重要改进: 泛型方法正式落地,支持方法级类型参数,解决了容器类库的转换难题,调用更自然(如 c.Convert[int]()); encoding/json/v2 全新推出,提供更严格的JSON处理、性能优化及选项式配置,老包底层已由v2实现支撑; 后量子加密支持升级,新增 crypto/mldsa 实现ML-DSA签名方案,TLS支持完整后量子握手; 运行时优化包括小型对象分配提速30%、正式可用的Goroutine泄漏检测工具; 其他亮点:

phplife的技术专栏,专注于php,golang,ai等技术应用 315

Go 打造的 CLI 版通用型 AI Agent,聊聊 covo-agent 的诞生

【摘要】本文介绍了作者开发Go语言AI Agent框架covonaut及其应用产品covo-agent的历程。由于Go生态缺乏成熟的Agent框架,作者从零打造了纯Go实现、生产可用的covonaut,包含工具注册、上下文压缩、工作流编排等完整功能。为验证框架实用性,作者开发了终端通用AIAgent产品covo-agent,通过TUI交互、多场景模式、丰富工具链等功能深度测试框架能力。这种"吃自己狗粮"的开发方式形成良性循环:产品需求驱动框架优化,框架升级反哺产品体验。最终形成了一套经过

路多辛的所思所想 313

Go学习笔记:包管理与项目组织——模块、导入导出与 init 执行顺序

Go包系统简明指南 本文介绍了Go语言的包管理系统核心概念和最佳实践: 包组织结构:Go采用"一个目录一个包"的简洁设计,包名通常与目录名一致 可见性规则:通过首字母大小写控制导出/私有,大写公开,小写私有 导入机制:支持标准导入、别名导入和空导入(仅执行init) 初始化流程:init函数自动执行,所有init完成后才进入main 项目结构:展示了标准Go项目目录布局和包划分方式 注意事项:包括避免循环依赖、子包独立性等重要原则 关键特点: 简单明确的设计哲学 严格的可见性控制 自动化的初始化流程 禁止循

欢迎访问我的个人博客:https://www.lxpavilion.top/ 291

不用守着直播间:在飞牛NAS部署Bililive-go,自动监控并保存直播录像

Bililive-go是一款开源直播录制工具,可自动监控多个平台直播间并在开播时录制直播流。文章介绍了如何在飞牛NAS通过Docker部署Bililive-go实现无人值守自动录播。该工具直接获取直播流而非屏幕录制,避免录制无关内容,特别适合同时监控多个直播间。部署后通过Web界面管理录制任务,视频文件保存在NAS指定目录。文中还提到直播文件体积较大(4小时直播约20GB),建议使用大容量存储并定期清理。最后介绍了如何通过cpolar实现远程管理录播任务,方便随时添加直播间或查看录制状态。

私聊前往站内信:https://i.csdn.net/#/msg/chat/weixin_44976692 1万+

GO 语言基础

切片是工作中最常用的序列类型(数组较少直接用)。

www654321wcn的博客 178

Go面试高频之defer执行顺序与return的交互细节

defer三步走:注册时确定参数→压入LIFO栈→函数退出时逆序执行。命名返回值可被defer修改。

qq_31142761的博客 90

【基于GO的Web开发2】gin框架初识

Gin 是基于Go 语言开发的轻量级、高性能 HTTP Web 框架。可以把框架理解为别人搭建好的舞台:底层的 HTTP 服务解析、路由匹配、请求处理等复杂逻辑均由框架封装完成,开发者无需重复造轮子,只需要聚焦业务逻辑开发,极大提升 Web 开发效率。Gin 框架封装底层 HTTP 逻辑,开发者专注业务开发,高效简洁;前后端分离核心:后端只返回 JSON 数据,不负责页面渲染;RESTful 是接口设计规范,同一资源、统一路径、不同请求方式对应不同操作;

2503_92676540的博客 204

datawhale--llm-algo-leetcod1️⃣

步骤操作输入形状输出形状说明1提升精度FP16FP32防止平方溢出2计算均方值[2, 16, 1]保留维度3乘以 rsqrt×[2, 16, 1]广播机制4乘以 weight×[512]weight 广播5恢复精度FP32FP16对齐输入精度为什么需要普通 Tensor 不会自动成为模型参数。会被找到。优化器会在训练过程中更新它。

weixin_43816875的博客 366

蔚来笔试真题-线性组合计数(C++/Py/Java /Js/Go)

蔚来技术岗笔试 7月26号真题,蔚来笔试第二题【线性组合计数】,提供详细思路讲解以及Java、C++、Python、Go、JavaScript多语言代码实现。蔚来笔试真题【线性组合计数】多语言题解。

qq_45776114的博客 168

为什么 Go 很适合 AI 辅助开发

Google指出,Go因语法极简、工具链统一、静态类型强、编译反馈明确等特性,成为AI Coding Agent的理想协作语言——它降低AI幻觉风险,提升代码可读性与可维护性,让“生成→验证→修复”闭环更高效可靠。

2501_92842654的博客 491

Go-Docker多阶段构建与容器化最佳实践

多阶段构建分离编译和运行环境作为基础镜像大幅减小体积非root用户运行提升安全性编译标志优化去除不必要的元数据。

qq_31142761的博客 177

3.10 Go select 语句学习笔记

知识点关键概念select 基本用法同时监听多个 channel,先准备好先执行,只执行一个 case无数据时立即执行 default,实现非阻塞接收/发送超时控制,返回定时 channel,超时后走该 case多 channel 同时就绪Go 随机选择一个 case,避免某个 channel 被偏好/饿死select 发送操作发送也可以用 select,随机选择发送目标。

云胜的笔记 326

Go面试核心考点之GMP调度器源码级深度解析

掌握GMP源码能让你在面试中降维打击。核心记忆点:本地队列→全局队列→窃取→netpoller→休眠。

qq_31142761的博客 261

Go-Kubernetes-CRD自定义资源开发从零实现Operator模式

CRD扩展K8s API定义领域资源Controller持续调和期望状态和实际状态提供代码生成和脚手架Operator实现运维自动化。

qq_31142761的博客 181

蔚来笔试真题-读数消融判定(C++/Py/Java /Js/Go)

蔚来技术岗笔试 8月17号真题,蔚来笔试第一题【读数消融判定】,提供详细思路讲解以及Java、C++、Python、Go、JavaScript多语言代码实现。蔚来笔试真题【读数消融判定】多语言题解。

qq_45776114的博客 159

Go-pprof性能分析完整指南从CPU到内存的深度诊断

定位计算密集型热点分析内存分配和泄漏发现goroutine泄漏火焰图直观展示调用链的性能分布。

qq_31142761的博客 69

Principles of Optics- 60th Anniversary Edition(光学原理)

Max Born, Emil Wolf - Principles of Optics_ 60th Anniversary Edition (2019, Cambridge University Press) - libgen.lc光学原理(英文版)

苹果越狱工具evasi0n-win-1.5支持IOS6.12

苹果越狱工具evasi0n-win-1.5支持IOS6.12,优化了iOS设备的启动时间,同时更新Cydia安装包列表。

上一篇: 重庆成都游记
下一篇: Go 常量为什么只支持基本数据类型?
煎鱼(EDDYCJY)
博客等级 码龄12年 1818粉丝 · 505原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值