golang 9
-
Golang 设计模式:装饰器模式
Golang 设计模式:装饰器模式 理论 在设计模式上,人们已经找了很多方式尝试去替代继承以回避其缺点。继承作为一种对对象添加额外职责和属性的方法,具有一个显而易见的缺点,就是继承会引入额外的静态特征,特别是在子类数量膨胀的情况下。 例如,针对一个视频的处理工作,可以分为转码和编辑两部分,而转码工作
-
Golang GMP 并发模型笔记
Golang GMP 并发模型笔记 以前看过,但是居然没有记笔记,遂补 背景 线程与协程首先有所区别。一般语义中,线程是: 操作系统的最小调度单元 创建销毁和调度由内核完成,在此期间需要切换内核态 而一般语义中的协程是: 又称为用户级线程 与线程的映射关系是 M : 1 创建销毁和调度在用户态完成
-
Golang 设计模式:观察者模式
Golang 设计模式:观察者模式 理论 观察者模式也是一种经典的设计模式,主要适用于多对一的订阅/发布场景。 什么是多对一的订阅/发布场景: 有多名观察者,观察一个被观察事物 定义了一对多的依赖关系,当一个对象状态发生改变,其依赖者会收到通知并自动更新 这种模式的存在主要是为了降低观察者和目标之间
-
Golang 设计模式:工厂模式
Golang 设计模式:工厂模式 背景 工厂模式也是一种经典的设计模式。特别的,对于 golang 来说,因为没有针对类的构造方法去定义一个统一的规范,如果每次创建一个类的实例时,都需要在业务代码里去执行一遍初始化的细节,就可能导致业务方法与组件类产生非常高的耦合度。如果组件类的定义有改变,那么业务
-
Golang 设计模式:单例模式
Golang 设计模式:单例模式 背景 单例模式可以说是一种最经典最简单的设计模式。顾名思义,这种设计模式下我们声明一个类并保证这个类在全局只存在唯一实例供外部反复调用。 单例模式需要解决的对应场景: 原理上只应该存在一个的类,比如全局的监控模块 实例化时很耗费资源的类,比如连接池、线程池,或者中间
-
Golang 网络 IO 和 epoll 调用
Golang 网络 IO 和 epoll 调用 之前看了 linux 内核关于网络收包和 IO 多路复用相关的原理:Linux 网络收包与 IO 多路复用 - tk_sky的博客 (mcyou.cc) 今天来看看 golang 对网络 IO 模型的包装和向上实现。在 linux 平台上,golang
-
Golang 垃圾回收原理
Golang 垃圾回收原理 背景 垃圾回收 GC 是一种内存管理的策略,垃圾收集器基于 runtime 在用户程序之下进行后台运作,根据一定策略回收用户不用的空间。 使用 GC 有下面的优势: 可以向用户屏蔽内存回收的细节,避免手动管理内存 以全局视野管理内存,避免不同模块的临界资源加大开发者的心智
-
记一个 golang 切片使用的坑
记一个 golang 切片使用的坑 今天在写 leetcode,做一道比较简单的题,看上去一个 dfs 就可以搞定:https://leetcode.cn/problems/combination-sum 然而交上去以后报了个奇怪的 WA: 鉴于其他 case 都是对的,只有一个答案莫名其妙错了一个
-
Golang 内存模型和分配机制笔记
Golang 内存模型和分配机制笔记 对 golang 内存模型和分配的学习笔记,参考了小徐先生文章和视频讲解:Golang 内存模型与分配机制 - 知乎 也参考了这篇图解文章:A visual guide to Go Memory Allocator from scratch (Golang) |