- 博客(4)
- 收藏
- 关注
原创 go语言map底层数据结构
go语言中的map是一种内建引用类型 map存储时key不可重复,无顺序,排序的话可以将key排序,然后取出对应value.只有可以比较的类型才可以作key,value则无限制. go中的map采用的是哈希map 给定key后,会通过哈希算法计算一个哈希值,低B位(这里是大写的B,2^B表示当前map中bucket的数量)代表的是存在map中的哪一个bucket,高8位则是了存在bucket中的一...
2019-02-22 11:24:27 1686
原创 go方法集
普通情况下,类型 T 和 T 上的方法集是互相继承的,即接收器是T和T时,方法都可以调用成功. but: 在接口中的method,对于普通类型T: T的方法集里不会继承包含*T实现的method,除非T自己实现相对应的method。 但是,*T会继承T的方法集。 type test interface { Test() } type User struct { Name strin...
2019-02-19 11:53:21 218
原创 go语言多线程操作map
go语言里的map因为是引用,所以多线程操作时必须加锁. 一开始我以为只要读写的key不会竞争就不会出现问题,但是测试后发现,即使写的时候采用的是不同的key,也会发生多线程错误:fatal error: concurrent map writes func main() { mm := make(map[int]int) go func() { for { ...
2019-02-15 17:27:39 1706
原创 go语言中的锁
虽然提供了channel来保证协程中的通信,在某些情况下,还是更适合使用锁来保证线程的安全. go语言中的锁分两种:互斥锁mutex和读写锁rwmutex 1.互斥锁 mutex 互斥锁是线程安全中最常用的锁,基本原理就是对某个操作进行加锁,无论读写同一时间内只有一个协程可以对当前数据进行操作,只有对当前锁解锁后其他协程才可以继续进行操作,互斥锁不可以重入,对一个已经加过锁的数据再次加锁会引起恐慌...
2019-02-15 11:57:25 1941 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人