【Go笔记】垃圾回收 初探 垃圾回收作为内存管理的一部分,有三个重要功能:分配和管理新对象、识别正在使用的对象、清除不再使用的对象 传统没有垃圾回收的语言需要手动分配,释放内存,可能会产生很多内存泄露和野指针问题。垃圾回收不完全保证内存泄漏,但是重要保障 手动管理内存往往难以在本地模块内做出全局的内存管理,特别是多模块同时管理使用同一块内存的情况。垃圾回收将垃圾收集的工具托管给了具有全局视野的运行时代码 垃圾回收带来 2025-09-09 go-note #Go笔记
【Go笔记】并发控制 俩引用 Data races are among the most common and hardest to debug types of bugs in concurrent systems. 如果你不知道如何退出一个协程,那么就不要创建这个协程 context ¶为什么 引入context之后就可以使用规范的退出方式<-ctx.Done() 具有级联关系,退出可以具有传递性,把整 2025-09-02 go-note #Go笔记
【Go笔记】通道与协程间通信 CSP并发编程 CSP (Communicating Sequential Process,通信顺序进程) - 用于描述鬓发系统中交互模式的形式化语言,通过通道来传递信息 进程之间通过消息传递来进行通信,而不是通过共享内存,各进程独立运行,只有在通信点,也就是channel上进行同步和数据交换 通信通常是同步的,只有发送方和接收方都做好准备了才会进行数据交换,因此会堵塞 避免了共享内存的数据竞争 2025-08-31 go-note #Go笔记
【Go笔记】深入协程设计与调度原理 协程的声明状态 如图: _Gidle - 刚开始创建的状态,初始化之后会变成_Gdead _Gdead - 被初始化和销毁时候的状态 _Grunnable - 在运行队列中,等待运行 _Grunning - 正在被运行,已经分配了M和P _Gwaiting - 运行时被锁定,不能执行用户代码,在gc和channel通信的时候常常遇到 _Gsyscall - 正在执行系统调用 _Gpreempte 2025-08-30 go-note #Go笔记
【Go笔记】协程 进程与线程 一个进程可以有单个或者多个线程 线程之间共享进程的内存等资源 进程之间相互独立,有独立的内存空间,机器码,状态,资源描述符等 开启一个新进程的开销比一个新线程大得多,且多进程之间通信困难 操作系统调度CPU的最小单位是线程,单核CPU使用交织线程,多核可实现真正的并行处理 线程的上下文切换 实际运行中,线程数量比CPU核心数多得多 为了平衡每个线程的执行时间,操作系统需要再适当的 2025-08-28 go-note #Go笔记
【Go笔记】反射 简介 反射是程序在运行时检查、修改自身结构和行为的能力,有点相当于自定义runtime 不会使用特别多,一般会作为框架或基础服务的一部分打包使用 使用方法 ¶基本 两个基本方法 - func ValueOf(i interface{}) Value, func TypeOf(i interface{}) Type 可以将reflect.Value看做反 2025-08-26 go-note #Go笔记
【Go笔记】接口与设计模式 接口的特征 隐藏细节 控制系统复杂性 权限控制 接口必须实现所有的方法 接口的使用 隐形声明 - 即只要实现接口内的所有方法,则实现了该接口 接口本身可以作为一个父类使用,即可以接受所有实现了该接口的数据类型,然后调用接口内定义了的方法 一个类型可以同时实现多个接口 鼓励使用组合而不是继承的方式来实现OOP 使用s, ok := i.(Type)断言来获取结构内存储的类型与数据 使用swit 2025-08-22 go-note #Go笔记
【Go笔记】异常与异常捕获 特性 panic执行的时候程序并不会直接异常退出,而是会终止当前函数的正常执行,执行defer并逐层返回 逐层返回的过程中,上层函数中,调用语句接下来的代码都不会被执行,而是直接执行defer然后再退出到上层 恢复 在defer中使用recover函数用于异常恢复 panic会在同一个goroutine中的defer调用中寻找到第一个recover用于恢复,恢复了之后就没有panic了,剩余 2025-08-21 go-note #Go笔记
【Go笔记】defer延迟调用 特性 defer延迟调用是Go的一个很有特色的特性了,按照LIFO的次序调用,能确保闭包或函数调用在函数结束的时候被执行 一般用于资源释放以及异常panic的处理 defer有时候可能不会被执行,比如放在if中但是条件不成立的语句 可以用于中间件,并用于整个goroutine的资源释放,错误处理操作等等。 参数预计算 - 即当程序执行到defer的时候,defer函数会捕获到当前的参数的值并保存 2025-08-20 go-note #Go笔记
【Go笔记】函数与切片 使用 函数是一类公民 可以作为变量,参数传递、返回、以及赋值 多返回值,返回结果和错误 闭包与陷阱 ¶闭包 包含函数的入口地址和其关联的环境 闭包可以引用闭包外的变量 ¶陷阱 123456values := []string{"a", "b", "c", "d", "e"} 2025-08-18 go-note #Go笔记