随笔分类 - Go
摘要:今天这篇笔记我们来学习Go 限流 限流是分布式系统中经常需要用到的技术,因为我们让请求没有限制,很容易就出现某个用户开很多线程把我们的服务拉跨,进而影响到别的用户。 限流 我们来看下Go语言层面可以怎么做到限流,先看一段不限流的代码, type APIConnection struct{} func
阅读全文
摘要:今天这篇笔记我们来学习一下context包 context包的一个应用场景是可以通过它控制goroutine的取消,超时等。 我们先来看一个取消的例子 context.WithCancel func doSomething(ctx context.Context) { ctx, cancelctx
阅读全文
摘要:今天这篇笔记我们来记录Channel 和 Select, Go语言并发中Channel是goroutine传递数据的桥梁,是非常重要的一个工具。 定义Channel 双向Channel 要定义一个channel很简单,只需要在类型前面加上chan就可以了, stringStream := make(
阅读全文
摘要:今天这篇笔记我们记录sync包下面的Cond,Once和Pool Cond cond就是条件,当条件不满足的时候等待Wait(),条件满足后,继续执行。 通过Signal()和Broadcast()来通知wait结束,继续执行。我们先来看一个Signal通知的例子 func main() { c :
阅读全文
摘要:今天这篇笔记我们来学习锁:互斥锁(Mutex) 和 读写锁(RWMutex) 互斥锁(Mutex) 首先我们来看一段代码,没有加锁的情况下,两个goroutine同时修改一个变量,会发生什么 func main() { var count int increment := func() { coun
阅读全文
摘要:今天这篇笔记重点讲goroutine 首先怎么定义goroutine 很简单,在方法前面加上go就可以了 func main() { go sayHello() } func sayHello() { fmt.Println("hello") } 也可以直接这样写, 基于匿名函数 go func()
阅读全文
摘要:已经把《Go 语言并发之道》通读了一遍,非常不错的一本书,对于理解掌握Go语言的并发知识有很大的帮助,接下来我会把书中有用的知识通过代码示例出来,把一些比较好的知识点记录下来。 首先我们来看一段代码 var data int go func() { data++ }() if data == 0 {
阅读全文
摘要:学习bolt源码 bbolt,发现有一处使用到mmap, 开始的时候不明白是什么东西,很是好奇,怎么就把硬盘上的文件读到内存了,并没有看到read方法,后来查了资料,知道原来使用了mmap,所谓mmap是讲文件映射到内存的方法,操作内存,数据就到了硬盘上,修改硬盘,数据也能刷到内存。 而且它有个好处
阅读全文