淦 Blog

我干了什么 究竟拿了时间换了什么

Golang接口

使用方法 声明与定义 接口是Go语言中的特殊类型,其包含两种形式:一种是带方法签名的接口,一种是空接口。带方法签名的接口内部包含其他类型可以实现的方法签名的集合。 1 2 3 4 type InterfaceName interface { funcNameA() funcNameB(a int, b string) error } 1 type InterfaceName inter...

Golang垃圾回收

在计算机科学中,垃圾回收(Garbage Collection,GC)是自动内存管理的一种形式,通常由垃圾收集器收集并适时回收或重用不再被对象占用的内存。垃圾回收作为内存管理的一部分,包含3个重要的功能:分配和管理新对象、识别正在使用的对象、清除不再使用的对象。 5种经典算法 标记-清扫 分为两个主要阶段,第1阶段是扫描并标记当前活着的对象,第2阶段是清扫没有被标记的垃圾对象。因此,标记-...

Golang反射

使用方法 两种基本类型 1 2 func ValueOf(i interface{}) Value func TypeOf(i interface{}) Type 这两个函数的参数都是空接口interface{},内部存储了即将被反射的变量。 可以将reflect.Value看作反射的值,reflect.Type看作反射的实际类型。其中,reflect.Type是一个接口,包含和类型有关的...

Golang内存分配管理

内存分配全局视野 span与元素 Go语言将内存分成了大大小小67个级别的span,其中,0级代表特殊的大对象,其大小是不固定的。当具体的对象需要分配内存时,并不是直接分配span,而是分配不同级别的span中的元素。因此span的级别不是以每个span的大小为依据的,而是以span中元素的大小为依据的。 span等级 元素大小(字节) ...

Golang并发控制

context 为什么需要context 在context之前,要管理协程退出需要借助通道close的机制,该机制会唤醒所有监听该通道的协程,并触发相应的退出逻辑。 为了能够优雅地管理协程的退出,特别是多个协程甚至网络服务之间的退出,Go引入了context包。 context使用方式 context接口详解 context.Context其实是一个接口,提供了以下4种方法: 1 2 3 ...

Golang哈希Map

map又被称为哈希表,是使用频率极高的一种数据结构。哈希表的原理是将多个键/值(key/value) 对分散存储在buckets (桶)中。给定一个键(key), 哈希(Hash) 算法会计算出键值对存储的位置。 哈希碰撞与解决方法 Go语言中的哈希表采用的是开放寻址法中的线性探测(Linear Probing)策略,线性探测策略是顺序(每次探测间隔为1)的。 开放寻址法(Open Add...

Golang defer、panic和recover

defer defer是 Go语言中的关键字,也是Go语言的重要特性之一。defer 的语法形式为 defer Expression,其后必须紧跟一个函数调用或者方法调用。在很多时候,defer后的函数以匿名函数或闭包的形式呈现,例如: 1 2 3 defer func(...){ //实际处理 }() defer将其后的函数推迟到了其所在函数返回之前执行。例如在运行如下代码后,将首先打印...

Golang通道

基本使用方式 通道是Go语言中的一等公民,将箭头(←)作为操作符进行通道的读取和写入。 1 2 c <- number <- c 通道声明与初始化 chan作为Go语言中的类型,其最基本的声明方式如下: 1 var name chan T name代表chan的名字,为用户自定义的; chan T代表通道的类型,T代表通道中的元素类型。在声明时,channel必须与...

Golang数组与切片

数组 数组是内存中一片连续的区域,需要在初始化时被指定长度,数组的大小取决于数组中存放的元素大小。 1 2 3 4 // 数组声明的三种方式 var arr [3]int var arr2 = [4]int{1, 2, 3, 4} arr3 := [...]int{2, 3, 4} 对于数组还有一种语法糖,可以不用指定类型,如arr3 := […]int{2,3,4},这种声明方式在编译时...

Golang协程

进程、线程和协程 进程就是应用程序的启动实例,拥有代码和打开的文件资源、数据资源、独立的内存空间。 线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程,并拥有自己的栈空间。 对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。 协程Goroutine是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以...