分类 Golang 中的文章

Golang|context

context意义

Go 中的 context 包在与 API 和慢处理交互时可以派上用场,特别是在生产级的 Web 服务中。在这些场景中,您可能想要通知所有的 goroutine 停止运行并返回。

……

阅读全文

Golang|channel

channel结构体

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
type hchan struct {
	qcount   uint           //大小
	dataqsiz uint           //有缓存的队列大小
	buf      unsafe.Pointer //有缓存的循环队列指针
	elemsize uint16
	closed   uint32
	elemtype *_type //类型
	sendx    uint   //有缓存的可发送下标
	recvx    uint   //有缓存的可存储下标
	recvq    waitq  //接受的goroutine抽象出来的结构体sudog的队列,是一个双向链表
	sendq    waitq  //同上,是发送的相关链表
	lock     mutex  //互斥锁
}
type waitq struct {
	first *sudog
	last  *sudog
}

channel创建

1
ch := make(chan int, 3)

创建channel实际上就是在内存中实例化了一个hchan的结构体,并返回一个ch指针,我们使用过程中channel在函数之间的传递都是用的这个指针,这就是为什么函数传递中无需使用channel的指针,而直接用channel就行了,因为channel本身就是一个指针。

……

阅读全文

golang|内存分配

内存分配

GO语言内存管理子系统主要由两部分组成:内存分配器和垃圾回收器(gc)。内存分配器主要解决小对象的分配管理和多线程的内存分配问题。

……

阅读全文

Golang|MPG

并行和并发

并发(concurrency)

两个或两个以上的任务在一段时间内被执行。例如跑步的时候,停下来系鞋带

……

阅读全文

Golang|map

map

由<key,value>对组成的抽象数据结构,并且同一个key只出现一次

……

阅读全文