Fred

学习是反复的事情

Fred's Github chart

13-2. go 接口型函数

1 什么是接口型函数? 某一函数类型实现了接口,该函数类型调用接口实现方法时再调用该函数类型本体,这种函数叫做接口型函数。 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 // 调用器接口 type Invoker interface { Call(interface{}) error } // 定义函数为类型 type FuncCaller func(interface{}) error // 接口实现 func (f FuncCaller) Call(i interface{}) error { return f(i) // 调用函数f本体 } 2 优点 可以完美使用接口优点,不必将某个接口函数附在某个

13-1.go语言代码优化技巧

1 1. sync.Pool sync.Pool 除了最常见的池化提升性能的思路,最重要的是减少 GC 。 常用于一些对象实例创建昂贵的场景。注意,Pool 是 Goroutine 并发安全的。 可以作为保存临时取还对象的一个“池子”。 特点 Goroutine 并发安全的 存储的都是临时对象 自动移除, 清理完全是由runtime控制的, 随时都可能被无通知清除 当这个对象的引用只有sync.Pool

12-2. go 信号量

1 什么是信号量 信号量是并发编程中常见的一种同步机制,在需要控制访问资源的线程数量时就会用到信号量 维基百科 信号量的概念是计算机科学家 Dijkstra (Dijkstra算法的发明者)提出来的,广泛应用在不同的操作系统中。系统中,会给每一个进程一个信号量,代表每个进程当前的状态,未得到控制权的进程,会在特定的地方被迫停

12-1. unsafe.Pointer和 uintptr

1 区别 unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算; 而uintptr是用于指针运算的,GC 不把 uintptr 当指针,也就是说 uintptr 无法持有对象, uintptr 类型的目标会被回收; unsafe.Pointer 可以和 普通指针 进行相互转换; unsafe.Pointer 可以和 uintptr 进行相互转换。 2 示例 通过一个例子加深理解,接下来尝试用指针的

11.Go语言设计模式

1 设计原则 单一职责原则:一个方法只完成一件事,实现高内聚低耦合。 开闭原则:对扩展开发,对修改关闭(常见做法:多态、基于接口实现、依赖注入)。 里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。 接口隔离原则:尽

9.Go性能调优 pprof

Go语言项目中的性能优化主要有以下几个方面: CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据 Memory Profile(Heap Profile):报告程序的内存使用情况 Block Profiling:报告 goroutines 不在运行状态的情况,可以用来分析和查找死锁等性能瓶颈 Goroutine Profiling:

8-6. sync.Cond 条件变量

sync.Cond 的使用场景 一句话总结:sync.Cond 条件变量用来协调想要访问共享资源的那些 goroutine,当共享资源的状态发生变化的时候,它可以用来通知被互斥锁阻塞的 goroutine。 sync.Cond 基于互斥锁/读写锁,它和互斥锁的区别是什么呢? 互斥锁 sync.Mutex 通常用来保护临界区和共享资源,条件变量 sync.Cond 用来协调想要访问共享资源

8-5. sync.Once 单例模式

使用场景 sync.Once 是 Go 标准库提供的使函数只执行一次的实现,常应用于单例模式,例如初始化配置、保持数据库连接等。作用与 init 函数类似,但有区别。 init 函数是当所在的 package 首次被加载时执行,若迟迟未被使用,则既浪费了内存,又延长了程序加载时间。 sync.Once 可以在代码的任意位置初始化和调用,因此可以延迟到使用时再执行,并发场景下是线程

8-4. sync.Pool 复用对象

sync.Pool sync.Pool 除了最常见的池化提升性能的思路,最重要的是减少 GC 。 常用于一些对象实例创建昂贵的场景。注意,Pool 是 Goroutine 并发安全的。 可以作为保存临时取还对象的一个“池子”。 特点 Goroutine 并发安全的 存储的都是临时对象 自动移除, 清理完全是由runtime控制的, 随时都可能被无通知清除 当这个对象的引用只有sync.Pool持有

8-3.分布式id 库snowflake和sonyflake

分布式ID的特点 全局唯一性:不能出现有重复的ID标识,这是基本要求。 递增性:确保生成ID对于用户或业务是递增的。 高可用性:确保任何时候都能生成正确的D。 高性能性:在高并发的环境下依然表现良好。 不仅仅是用于用户ID,实际互联网中有很多场景需要能够生成类似MySQL自增ID这样不断增大,同时又不会重复的
0%