
Golang学习笔记
文章平均质量分 79
LuckyLay
这个作者很懒,什么都没留下…
展开
-
LeetCode算法题(Go语言实现)_28
循环索引设计:通过+n实现议员位置的循环复用,避免重新生成队列贪心策略证明:优先禁止最近敌方议员可最小化己方损失(数学归纳法可证)原创 2025-04-03 20:30:00 · 958 阅读 · 0 评论 -
LeetCode算法题(Go语言实现)_27
数学本质滑动窗口公式:维护满足的连续时间序列单调性保证:严格递增特性使队列保持有序,避免重复扫描工程优化内存预分配:根据最大调用次数 10^4 预分配队列容量数据结构选择:双端队列比普通队列更高效(如Java的ArrayDeque)扩展应用实时监控系统:统计最近N秒的请求频率股票交易系统:计算移动时间窗口内的交易量物联网设备:监测传感器数据的实时波动范围。原创 2025-04-03 19:45:00 · 803 阅读 · 0 评论 -
设计模式文章汇总-Golang语言实现
设计模式学习笔记,包含23种设计模式,示例使用Go语言实现原创 2025-03-08 21:00:00 · 245 阅读 · 0 评论 -
Golang学习笔记_49——解释器模式
解释器模式是一种行为型设计模式,通过定义语言的文法结构和解释器,实现对特定语法规则的解析执行。其核心特点包括:•文法抽象:将语法规则转化为类层次结构•递归解析:通过组合模式构建抽象语法树(AST)•动态扩展:支持新增表达式类型而不修改现有代码。原创 2025-03-10 20:00:00 · 783 阅读 · 0 评论 -
Golang学习笔记_48——中介者模式
中介者模式是一种行为型设计模式,通过引入中介对象来封装一组对象间的交互,实现对象间解耦。交互中心化:所有对象通信通过中介者进行解耦网络:消除对象间的直接依赖关系动态协调:可随时调整交互规则而不影响对象。原创 2025-03-10 19:30:00 · 776 阅读 · 0 评论 -
Golang学习笔记_47——访问者模式
访问者模式是一种行为型设计模式,允许在不修改已有对象结构的前提下定义新的操作。其核心特点包括:•操作解耦:将数据操作与数据结构分离•双重分发:通过两次方法调用实现动态绑定•扩展开放:新增操作无需修改现有类。原创 2025-03-08 20:00:00 · 1186 阅读 · 0 评论 -
Golang学习笔记_46——状态模式
状态模式是一种行为型设计模式,允许对象在其内部状态改变时改变自身行为,使对象表现如同改变了其类。其核心特点包括:•状态抽象化:将状态抽象为独立对象•行为动态化:运行时根据状态自动切换行为•条件解耦:消除复杂的条件判断语句。原创 2025-03-07 21:00:00 · 703 阅读 · 0 评论 -
Golang学习笔记_45——备忘录模式
备忘录模式是一种行为型设计模式,通过在不破坏对象封装性的前提下捕获和存储对象内部状态,实现状态的可追溯恢复机制。其核心特点包括:•状态封装:将对象状态隔离在专用备忘录对象中•历史回溯:支持任意时间点的状态版本恢复•权限隔离:状态存储与恢复操作限定在特定对象间。原创 2025-03-07 20:00:00 · 1158 阅读 · 0 评论 -
Golang学习笔记_44——命令模式
命令模式是一种行为型设计模式,通过将请求封装为独立对象实现调用者与执行者的解耦,支持请求的队列化、撤销重做和事务管理。其核心特点包括:•请求对象化:将操作抽象为可传递的命令对象•解耦调用链:调用者无需了解具体执行细节•操作可编排:支持命令的组合与顺序控制。原创 2025-03-06 20:00:00 · 1031 阅读 · 0 评论 -
Golang学习笔记_43——责任链模式
责任链模式是一种行为型设计模式,允许将请求沿着处理链传递,直到有对象处理它。其核心特点包括:•解耦请求与处理:发送者无需知道具体处理者•动态链式处理:可动态调整处理链顺序和组成•职责单一性:每个处理者专注特定类型请求。原创 2025-03-06 19:00:00 · 947 阅读 · 0 评论 -
Golang学习笔记_42——迭代器模式
迭代器模式是一种行为型设计模式,提供顺序访问聚合对象元素的方法,无需暴露其内部结构。解耦遍历逻辑:将遍历算法与聚合对象分离统一访问接口:为不同数据结构提供一致的遍历方式多态迭代:支持多种遍历策略(正序/倒序/过滤等)原创 2025-03-03 21:57:23 · 638 阅读 · 0 评论 -
Golang学习笔记_41——观察者模式
Golang学习笔记_38——享元模式Golang学习笔记_39——策略模式Golang学习笔记_40——模版方法模式观察者模式是一种行为型设计模式,建立对象间的一对多依赖关系,当一个对象(主题)状态改变时,自动通知所有依赖对象(观察者)。其核心特点包括:二、特点分析优点缺点2. 物联网设备状态监控3. 电商订单状态通知四、Go语言实现示例执行结果五、高级应用1. 异步通知机制(参考网页10)2. 事件过滤机制六、与其他模式对比模式核心区别典型场景原创 2025-03-03 21:55:23 · 963 阅读 · 0 评论 -
Golang学习笔记_40——模版方法模式
模板方法模式是一种行为型设计模式,通过在抽象类中定义算法的骨架,并将部分步骤的实现延迟到子类中,实现代码复用和扩展控制。算法框架固化:父类定义不可变的执行流程步骤差异化:允许子类重写特定步骤实现扩展控制:通过钩子方法提供选择性扩展点抽象粒度:合理划分步骤粒度(建议5-8个步骤)扩展控制:使用final限制模板方法,提供钩子扩展点性能优化:避免在模板方法中进行复杂计算(网页10建议将耗时操作放在具体类)原创 2025-02-27 21:00:00 · 1490 阅读 · 0 评论 -
Golang学习笔记_39——策略模式
策略模式是一种行为型设计模式,通过定义一系列可互换的算法,并将其封装为独立类,使得算法可以独立于客户端而变化。核心思想是将算法与使用场景解耦,支持运行时动态切换策略。策略模式通过算法封装和动态切换灵活扩展:新增策略无需修改上下文代码复用:相同策略可被多个客户端共享条件简化:消除复杂的if-else分支通过接口实现多态,而非继承使用工厂模式管理策略实例组合策略实现复杂算法叠加避免策略类过度细分(如差异过小的策略合并)原创 2025-02-27 16:17:08 · 1041 阅读 · 0 评论 -
Golang学习笔记_38——享元模式
享元模式是一种结构型设计模式,通过共享对象来有效支持大量细粒度对象的复用,从而减少内存占用和提高性能。内部状态(Intrinsic):可共享的固定属性(如字符编码、颜色配置)外部状态(Extrinsic):不可共享的运行时上下文(如坐标位置、字体大小)享元模式通过共享细粒度对象内存占用问题:减少重复对象的存储性能优化问题:降低对象创建开销状态管理问题:明确区分内外状态使用sync.Map或mutex保证线程安全严格分离内部/外部状态合理设计对象键值(如颜色+名称组合键)原创 2025-02-25 11:43:12 · 1063 阅读 · 0 评论 -
Golang学习笔记_37——外观模式
外观模式是一种结构型设计模式,通过为复杂子系统提供一个统一的高层接口,降低客户端与子系统的耦合度,使得子系统更易使用。外观模式通过封装复杂子系统简化接口:客户端调用复杂度显著降低解耦设计:隔离变化,提升系统可维护性灵活扩展:支持多层外观和子系统自由组合合理划分子系统职责避免外观类过度膨胀权衡直接访问子系统与通过外观访问的边界。原创 2025-02-25 10:54:39 · 745 阅读 · 0 评论 -
Golang学习笔记_36——装饰器模式
装饰器模式(Decorator Pattern)是一种结构型设计模式,允许在不修改原始对象结构的情况下,通过创建包装对象动态地扩展对象的功能。它通过嵌套组合替代继承,实现功能的灵活叠加。装饰器模式通过嵌套包装动态扩展:运行时灵活添加功能避免继承:通过组合替代多层继承接口透明:客户端无需感知装饰过程利用接口实现多态通过结构体嵌套实现装饰器链保持装饰器与原始组件接口一致。原创 2025-02-20 22:25:19 · 1030 阅读 · 0 评论 -
Golang学习笔记_35——代理模式
代理模式(Proxy Pattern)是一种结构型设计模式,通过引入代理对象间接访问真实对象,从而在不修改原对象代码的前提下,控制访问或增强功能(如日志、缓存、权限校验)。代理模式通过间接访问和逻辑增强安全控制:通过代理拦截非法请求功能扩展:无侵入式添加日志、缓存等逻辑资源优化:延迟加载降低系统开销优先使用接口定义抽象主题代理与真实对象需实现相同接口避免过度使用动态代理(反射有性能损耗)原创 2025-02-20 21:55:18 · 1209 阅读 · 0 评论 -
Golang学习笔记_34——组合模式
组合模式(Composite Pattern)是一种结构型设计模式,通过将对象组织成树形结构来表示“部分-整体”的层次关系,使客户端可以统一处理单个对象和组合对象。组合模式通过树形结构和统一接口层次结构表示:天然适合文件系统、组织架构等场景递归操作简化:通过统一接口实现递归遍历扩展性提升:新增组件类型不影响现有结构通过接口实现多态特性使用切片管理子组件集合谨慎处理叶子节点的无效方法(如Add()原创 2025-02-18 19:00:00 · 991 阅读 · 0 评论 -
Golang学习笔记_33——桥接模式
桥接模式是一种结构型设计模式,通过将抽象部分与实现部分分离,使它们可以独立变化。它通过组合关系替代继承关系,解决多维度的扩展问题。桥接模式通过分离抽象与实现多维度变化:独立管理不同维度的变化跨平台开发:统一抽象接口,差异化实现动态配置:运行时切换实现逻辑在 Go 中实现时需注意组合优于继承的原则,通过接口定义清晰的抽象边界。当系统存在多个独立变化维度时,桥接模式能显著降低代码复杂度。原创 2025-02-18 18:30:00 · 1075 阅读 · 0 评论 -
Golang学习笔记_32——适配器模式
将一个类的接口转换成客户端期望的另一个接口,使原本因接口不兼容而无法协同工作的类能一起工作。原创 2025-02-17 17:22:29 · 892 阅读 · 0 评论 -
Golang学习笔记_31——原型模式
原型模式是一种创建型设计模式,通过复制现有对象(原型)来创建新对象,而不是通过构造函数实例化。它适用于需要高效创建对象或动态配置对象的场景。原型模式通过复制现有对象对象创建成本高:避免重复初始化。需要动态配置对象:基于运行时状态生成变种。隔离构造细节:绕过复杂构造函数。在 Go 中实现时需注意深拷贝问题,可通过序列化或手动复制引用类型字段解决。如果需要更复杂的深拷贝逻辑(如循环引用处理),可以结合其他技术(如反射、代码生成工具)实现。原创 2025-02-17 16:52:57 · 999 阅读 · 0 评论 -
Golang学习笔记_30——建造者模式
建造者模式是一种创建型设计模式,用于分步骤构造复杂对象。它将对象的构造过程与其表示分离,使得同样的构造过程可以创建不同的表示。建造者模式通过分步骤构造对象和隔离构造逻辑,解决了复杂对象创建的灵活性问题。对象构造过程复杂,涉及多个步骤。需要生成不同表示的对象。避免构造函数参数过多。结合链式调用、参数校验等技巧,可以进一步提升代码的可读性和健壮性。如果需要更具体的扩展场景(如结合工厂模式),可以告诉我!🚀。原创 2025-02-11 14:06:28 · 884 阅读 · 0 评论 -
Golang学习笔记_29——抽象工厂模式
抽象工厂模式将产品的创建过程封装在工厂中,客户端代码只需要依赖抽象接口,而不需要关心具体实现。抽象工厂模式将具体产品的创建过程封装在工厂中,客户端只需要依赖抽象接口,无需关心具体实现。抽象工厂模式(Abstract Factory)是一种创建型设计模式,用于。抽象工厂模式确保创建的对象属于同一个产品族,从而保证它们之间的兼容性。抽象工厂模式支持在运行时动态切换产品族,而无需修改客户端代码。使用抽象工厂模式实现组件创建。示例 6:电商平台的支付与物流。示例 2:游戏中的角色装备。示例 8:游戏中的场景切换。原创 2025-02-11 09:54:04 · 1000 阅读 · 0 评论 -
Golang学习笔记_28——工厂方法模式(实例)
【代码】Golang学习笔记_28——工厂方法模式(实例)原创 2025-01-20 21:55:19 · 406 阅读 · 0 评论 -
Golang学习笔记_28——工厂方法模式
工厂方法模式(Factory Method)是一种创建型设计模式,它提供了一种创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法模式让类的实例化推迟到子类中进行。原创 2025-01-20 21:51:27 · 789 阅读 · 0 评论 -
Golang学习笔记_27——单例模式
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。这种模式在很多场景下非常有用,比如数据库连接池、日志系统等,这些场景中我们通常希望在整个应用程序中只有一个对象来负责相关的操作,避免资源的浪费和数据的不一致。原创 2025-01-19 22:09:07 · 1640 阅读 · 0 评论 -
Golang学习笔记_26——通道
虽然协程可以并发执行,但有时候我们需要在协程之间传递数据或进行同步。在Go中,这是通过通道(Channel)来实现的。在Go中,协程是通过go关键字来创建的。当你使用go关键字调用一个函数时,该函数会在一个新的协程中执行。通道的类型由通道中传递的元素类型决定。例如,chan int是一个可以传递int类型数据的通道。协程的调度由Go运行时(runtime)管理,开发者不需要关心具体的调度细节。通道是一种类型安全的、多路复用的、在协程之间传递通信的管道。)向通道发送或接收数据。原创 2025-01-16 22:15:22 · 675 阅读 · 0 评论 -
Golang学习笔记_25——协程
它们提供了一种高效的方式来并发执行任务。在Go中,协程是非常轻量级的,创建和销毁它们的开销非常小,这使得在Go程序中大量使用协程成为可能。go关键字后面跟的是一个函数调用。当Go运行时遇到go关键字时,它会在一个新的协程中异步执行该函数调用。Golang(也称为Go语言)中的协程(Goroutine)是一种轻量级的线程,由Go运行时管理。在Go中,你可以通过go关键字来创建一个新的协程。原创 2025-01-14 13:46:52 · 411 阅读 · 0 评论 -
Golang学习笔记_24——泛型
Go语言从1.18版本开始引入了泛型,这是Go语言的一个重要特性,它允许函数、类型和接口在定义时不必绑定到特定的类型上,而是可以在后续使用时再指定具体的类型。在调用泛型函数、创建泛型类型的实例或赋值给泛型接口时,类型参数会被具体化(实例化)。类型参数是泛型函数、泛型类型和泛型接口定义中声明的占位符,它们用于表示在泛型实例化时可以指定的具体类型。这通过类型约束来实现。泛型函数允许在函数签名中声明类型参数,这些参数将在函数调用时具体化。在泛型定义中,类型参数通过方括号[]中的类型参数列表进行声明。原创 2025-01-14 13:45:39 · 763 阅读 · 0 评论 -
Golang学习笔记_23——error补充
自定义错误类型可以实现error接口,该接口仅包含一个Error方法,返回一个字符串。// 自定义错误return err测试方法err!= nil {输出结果PASS。原创 2025-01-09 21:47:23 · 653 阅读 · 0 评论 -
Golang学习笔记_22——Reader示例
io.Reader。原创 2025-01-09 21:44:47 · 499 阅读 · 0 评论 -
Golang学习笔记_21——Reader
io.Reader 是 Go 语言标准库 io 包中的一个接口,它定义了对象读取数据的基本方法。io.Reader 接口非常简单,只有一个方法p []byte:一个字节切片,用于存储从读取器中读取的数据。n int:实际读取的字节数,0 <= n <= len§。如果 n == 0,通常意味着已经到达了数据流的末尾或没有更多数据可读。err error:读取过程中遇到的错误,如果读取成功,则 err 为 nil。原创 2025-01-08 22:43:43 · 589 阅读 · 0 评论 -
Golang学习笔记_20——error
Code intCode: 1,测试方法demo_2()输出结果code:1PASS。原创 2025-01-07 22:01:40 · 522 阅读 · 0 评论 -
Golang学习笔记_19——Stringer
Golang学习笔记_16——MapGolang学习笔记_17——方法Golang学习笔记_18——接口在Go语言中,Stringer 是一个接口,定义在 fmt 包中。它用于自定义类型的字符串表示形式。当你希望你的类型在打印(例如使用 fmt.Print、fmt.Println 或 fmt.Sprintf 等函数)时具有特定的输出格式,你可以实现这个接口。Stringer 接口非常简单,只包含一个方法:2. 实现Stringer接口要实现 Stringer 接口,你需要为你的类型定义一个 Stri原创 2025-01-07 21:46:10 · 1087 阅读 · 0 评论 -
Golang学习笔记_18——接口
接口通过type关键字定义,并且接口中的方法没有实现(即没有函数体),只有方法签名。type 接口名 interface {方法名1(参数列表1) 返回值列表1方法名2(参数列表2) 返回值列表2...举个例子。原创 2025-01-06 13:41:18 · 474 阅读 · 0 评论 -
Golang学习笔记_17——方法
在Go语言中,方法(Method)是一种带有接收者(Receiver)的函数。接收者可以是值接收者(Value Receiver)或指针接收者(Pointer Receiver),并且它允许我们为特定类型定义附加的行为。方法使得我们可以像面向对象编程一样为结构体(Struct)或其他类型定义方法,但Go本身并不是纯面向对象的语言。记住:方法只是个带接收者参数的函数。// 方法体recv:接收者变量名,它是方法作用的对象实例。:接收者的类型,可以是值类型或指针类型。MethodName。原创 2025-01-06 13:39:27 · 856 阅读 · 0 评论 -
Golang学习笔记_16——Map
在Go语言中,map是一种内置的数据结构,用于存储键值对(key-value pairs)。map提供了快速的查找、插入和删除操作,使得它在处理需要快速访问的数据时非常高效。原创 2024-12-20 22:29:52 · 734 阅读 · 0 评论 -
Golang学习笔记_15——range
在Go语言中,range关键字用于遍历数组、切片、字符串、映射(map)、通道(channel)等数据结构。它提供了一种简洁且强大的方式来迭代这些集合中的元素。原创 2024-12-20 22:27:45 · 597 阅读 · 0 评论 -
Golang学习笔记_14——切片
指向数组的指针:切片存储了数组的首地址,指向数组中的某个元素。切片的长度(len):切片中元素的数量。切片的容量(cap):从切片的首元素到数组末尾的元素数量,表示在不需要重新分配底层数组的情况下,切片可以增长的最大长度。原创 2024-12-18 13:54:23 · 920 阅读 · 0 评论