- 博客(5)
- 收藏
- 关注
原创 go chan
go 语言天然支持并发,可以通过简单的开启轻量的协程到达,但是多个goruting之间是怎样通信呢,常用的通信模块有共享内存,管道,消息队列通信,Go依赖于成为CSP的并发模型,channel 作为go的一种类似管道,通过它可以在goroutine之间发送和接收消息。通过Channel实现这种同步模式它是Golang在语言层面提供的goroutine间的通信方式。基本使用1.声明和创建ch := make(chan elemType ,cap) //初始化var ch1 ...
2022-01-13 14:19:23
260
原创 go sync.Mutex
并发编程中,不免涉及到共享资源的操作,go也提供简易的互斥锁作为访问控制的手段sync.Mutex,通过简单的Lock()进行加锁,Unlock()进行释放。接下来我们从源码入手,看看加锁和解锁到底做了什么。1.sync.Mutex结构// A Mutex is a mutual exclusion lock.// The zero value for a Mutex is an unlocked mutex.//// A Mutex must not be copi...
2022-01-10 15:54:27
413
原创 go map
前言编程语言中,需要一些存储的复合数据结构,需要快速的支持查找(O(1)),插入,删除等应用场景,比如比如java里的HashMap,python里的Dictionary,scala里的各种Map,go也原生提供了一个类似的数据类型,就叫做map。首先它是个mutable的,也就是说,可以随时对其进行修改。其次,它不是线程安全的。基本使用1.初始化和声明var mapName map[KeyType]ValueType其中mapName是变量名称,keyType是键的类型,valu
2022-01-05 16:52:54
399
原创 go defer
前言 程序运行过程中,往往都需要申请资源,比如数据库连接,文件句柄等,程序运行资源使用结束后,需要释放资源,很多语言都有类似在某结束时机统一的去释放,比如析构函数这类的设计,go的话也提供了类似的设计即延迟(defer)语句,你可以在函数中添加多个defer语句。当函数执行到最后时,这些defer语句会按照逆序执行, 最后该函数返回。特别是当你在进行一些打开资源的操作时,遇到错误需要提前返回,在返回前你需要关闭相应的资源,不然很容易造成资源泄露等问题。defer执行时机:函数返...
2021-12-24 15:10:52
479
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人