01 2019 档案
摘要:sync.Pool 1. Pool是一个可以分别存取的临时对象的集合。 2. Pool中保存的任何item都可能随时不做通告的释放掉。如果Pool持有该对象的唯一引用,这个item就可能被回收。 3. Pool可以安全的被多个线程同时使用。 4. Pool的目的是缓存申请但未使用的item用于之后的
阅读全文
摘要:Context,是golang用来控制并发流程的库,它能方便的将主控程序的停止信号传递到goroutinue中,从而实现一键中止关联goroutinue的执行,除此之外,它还能将外部变量通过Value的接口传递到goroutinue中。Context是一个接口类型,可以看下面的代码的定义,可以提供一
阅读全文
摘要:sync.WaitGroup,顾名思义,等待一组goroutinue运行完毕。sync.WaitGroup声明后即可使用,它有如下方法: func (wg *WaitGroup) Add(delta int) #不能传入符数,否则引发panic func (wg *WaitGroup) Done()
阅读全文
摘要:计算 24 点是一种扑克牌益智游戏,随机抽出 4 张扑克牌,通过加 (+) ,减 ( ) ,乘 ( ), 除 (/) 四种运算法则计算得到整数 24 ,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写 joker 表示小王,大写 JOKER 表示大王: 3 4 5 6 7 8 9 10 J Q
阅读全文
摘要:golang 通过sync/atomic库来支持cpu和操作系统级别的原子操作。但是对要操作类型有如下要求 int32, int64,uint32, uint64,uintptr,unsafe包中的Pointer。不过,针对unsafe.Pointer类型,该包并未提供进行原子加法操作的函数 syn
阅读全文
摘要:sync.Cond 条件变量是基于互斥锁的,它必须有互斥锁的支撑才能发挥作用。 sync.Cond 条件变量用来协调想要访问共享资源的那些线程,当共享资源的状态发生变化的时候,它可以用来通知被互斥锁阻塞的线程 条件变量的初始化离不开互斥锁,并且它的方法也是基于互斥锁的 条件变量有三个方法,等待通知(
阅读全文
摘要:将panic的转化为error类型值,并将其作为函数值返回给调用方 保证sync.Mutex同步锁得到解锁
阅读全文
摘要:switch语句对case表达式的结果类型有如下要求: 要求case表达式的结果能转换为switch表示式结果的类型 并且如果switch或case表达式的是无类型的常量时,会被自动转换为此种常量的默认类型的值。比如整数1的默认类型是int, 浮点数3.14的默认类型是float64 switch
阅读全文
摘要:切片是引用类型,而数组是值类型,并且for...range有以下规则: 1. range表达式只会在for语句开始执行时被求值一次,无论后边会有多少次迭代 2. range表达式的求值结果会被复制,也就是说,被迭代的对象是range表达式结果值的副本而不是原值 打印结果 在range开始迭代时就浅拷
阅读全文
摘要:"参考" package main import ( "fmt" "sync/atomic" "time" ) func main() { var count uint32 trigger := func(i uint32, fn func()) { for { if n := atomic.Loa
阅读全文
摘要:不可以寻址, 指的是不能通过&获得其地址。 golang中不能寻址的可以总结为:不可变的,临时结果和不安全的。只要符合其中任何一个条件,它就是不可以寻址的。 具体为: 常量的值。 基本类型值的字面量 算术操作的结果值 对各种字面量的索引表达式和切片表达式的结果值: 不过有一个例外,对切片字面量的索引
阅读全文