Note:目录同级为 代码展示,可在Goland中运行
Note: Go 1.18 移除用于泛型的constraints包
- 1 os操作系统模块
- 1.1 os中FileInfo底层的文件描述符和相关信息
- 1.2 os文件操作
- 1.3 io包底层Reader和Writer接口
- 1.3.1 os,bytes,strings包
- 1.4 io断点续传
- 1.5 FilePath包
- 2 bufio缓存读写
- 1 Channel内部结构及源码分析(含PPT分析)
- 2 channel应用:TimerChan模块源码分析及使用陷阱
- 3 Select多路复用
- 4 CSP理论中的Process/Channel
- 1 interface 与 Go 语言各种数据类型关系--> _type 字段的基础上,增加一些额外的字段来进行管理
- 2 反射
- 2.1 反射三大定律
- 2.2 类型断言
- 2.2.1 断言的类型T是一个具体类型 或则 接口类型
- 类型断言性能分析
- 空接口类型直接类型断言具体的类型
- 空接口类型使用TypeSwitch 只有部分类型
- 空接口类型使用TypeSwitch 所有类型
- 直接使用类型转换
- 非空接口类型判断一个类型是否实现了该接口 12个方法
- 直接调用方法
- 2.3 获取结构体字段及获取方法名字
- 2.4 通过 reflect.Value 修改值,调用结构体方法,调用普通函数
- 2.5 反射性能优化演变案例
- 2.6 通过反射进行深度比较引用类型
- 底层类型相同,相应的值也相同,两个自定义类型*是否“深度”相等
- 一个nil值的map和非nil值但是空的map*是否“深度”相等
- 带有环的数据对比*是否“深度”相等
- 2.7 通过reflect.implements判断struct类型是否实现某接口
- 1 值传递-数组
- 2 引用传递-指针切片和指针数组
- 3 切片和数组参数传递性能对比
- 4 底层数据结构
- 5 nil切片和空切片
- 6 扩容策略
- 7 不同类型的切片间互转
- 8 带索引初始化数组和切片
- 9 切片的复制方式对比: copy和=复制
- 1 指针类型转换及修改值
- 2 指针分类及unsafe包使用
- 3 获取并修改结构体私有变量值
- 4 切片与字符串零拷贝互转(指针和反射方式)
- 5 结构体的内存对齐规则
- 5.1 结构体排序优化内存占用
- 5.2 空 struct{} 结构体使用
- 空结构体作为第一个元素
- 空结构体作为最后一个元素
- 1 创建型模式
- 2 结构型模式
- 3 行为型模式
- 4 函数选项:成例模式-->在日志库zap中实现
- 4.1 未使用函数选项初始化结构体的现状
- 4.2 区分必填项和选项
- 4.3 带参数的选项模式
- 5 插件式编程-->grpc中实现
- 6 同步模式(sync同步原语以及扩展原语)
- 6.1 waitGroup同步等待组对象
- 6.2 使用互斥锁(sync.Mutex)实现读写功能和直接使用读写锁(sync.RWMutex)性能对比
- 6.3 Once源码分析
- 6.4 并发安全的sync.Map与sync.RWMutex封装的map对比及源码分析
- 6.5 Pool对象池模式( 非连接池 !)-->官方包对象池fmt
- 6.6 Cond条件变量通知所有协程及NoCopy机制-->熔断框架hystrix-go实现
- 6.7 atomic原子操作源码分析-->zerolog源码中实现
- 6.8 ErrorGroup获取协程中error
- 6.9 信号量Semaphore
- 6.10 SingleFlight避免缓存击穿
- 1 函数应用
- 2 高级函数filter,map,reduce
- 2.1 简单案例理解 filter,map,reduce
- 2.2 interface{} + reflect 实现泛型->Go1.18之前
- 2.3 go-zero框架实现 map-reduce
- 2.4 RXGo基于pipelines实现ReactiveX 编程模型
- 3 一等公民案例
- 网络管理中问题需求
- 网络管理中三种处理对比
- 3.1 通过同享内存通信
- 3.2 通过通信(具体数据)共享内存
- 3.3 通过通信(函数)共享内存
-
1 http服务端高级封装演变
-
2 http客户端高级封装演变
Note: 内部c代码需要自己编译成对应本地 静态库 或则 动态库,可参考C基本知识
- 1 Go调用自定义C函数-未模块化
- 2 Go调用自定义C函数-模块化
- 3 Go重写C定义函数
- 4 cgo错误用法:引入其他包的变量
- 5 #Cgo语句
- 6 Go获取C函数的errno
- 7 C的void返回
- 8 Go调用模块化C++库
- 9 调用静态C库
- 10 调用动态C库
- 11 Golang使用pkg-config自动获取头文件和链接库的方法
- 1 queue双端单向队列(泛型)
- 2 加解密
- 2.1 对称式加密
- 2.2 数字签名(hmac,md5,sha1,sha256)
- 2.3 非对称加密算法rsa
- 3 随机算法(伪随机和真随机)
- 4 排序算法分类及图解(sort包源码分析)
- 4.1 sort包使用
- 不同结构体切片根据反射reflect实现自定义排序
- map根据key实现排序
- sort.Search 根据排序切片找索引
- 4.1 sort包使用
- 5 Jwt源码分析及中间件使用
- Symmetric 对称加密->HSA
- asymmetric 非对称加密->RSA
- 6 pem(Privacy Enhanced Mail Certificate保密增强邮件协议
- 7 Base64编码解析
- 8 trie前缀树
- 9 Golang底层数据结构-涉及数值类型占用的bit
- 0 错误(err)和异常(exception)区别及处理方式
- 1 自定义错误类型打印错误栈
- 2 扩展包pkg.errors
- 3 Gin的错误recover分析(panic和recover源码分析)
- 4 生成errCode错误码及信息
- 5 error如何正确比较
- 6 收集多个errors-->go-multierror实现
- 1 不同类型为nil时的地址和size大小
- 2 不同类型与nil的比较
- 3 不同类型nil时的特点
- 1 go-module 实践篇
- 模块缓存
- GOPROXY
- 2 go-module原理篇
- Minimal Version Selection 最小版本选择算法
- 3 go1.17 module依赖图修剪及延迟module加载
- 1 Linux内存及Go内存结构管理
- 2 GC垃圾回收机制
- 2.1 下次GC的时机
- 2.2 删除Map元素时通过 runtime.MemStats 查看GC回收流程
- 2.3 内存对象中有指针与无指针的GC对比,检测内存对象中的指针
- 3 逃逸分析