写服务器,天天与各种数据结构打交道。学习go语言已经10天了,还是未能很好应用。写起代码磕磕绊绊。希望写个博客,增加记忆理解。
对于何时用channel,何时用sync.Mutex很纠结。何时用go gorountine也很纠结
第一种: 生产者+消费者
生产者:在一个gorountine,不停的生产 发送到channel
消费者:在一个gorountine,不停的处理来自生产者channel的数据,并通过另一个channel发出来
主线程里,一个for循环,生产者+消费者一起
例子如下:
func generate(ch chan int) {
for i := 2; ; i++ {
ch <- i
}
}
func filter(in, out chan int, prime int) {
for {
I := <-in
if i%prime != 0 {
out <- i
}
}
}
func main() {
runtime.GOMAXPROCS(1)
ch := make(chan int)
go generate(ch)
for {
prime := <-ch
ch1 := make(chan int)
go filter(ch, ch1, prime)
ch = ch1//这句话有疑问,,不明白要干嘛
}
}
同时监听多个channel
func xx() {
for {
select {
case req := <-service:
case <-quit:
return
}
}
}
可以主线程来一个select,处理其他gorountine来的消息?
@ import package的init-----包间顺序不定
@包里goroutine在所有init之后才执行
@对变量的读写都是原子的----这么牛逼???那还用我加锁??怀疑!!
@没有指针运算,用slice代替
@slice=&array 等同于 slice=array[0:len(array)]
@常量不用定义类型 const MAX = 100
@枚举 const ( _=itoa; A = itoa*2; B; C)
太奇葩,这个itoa,不如直接写死吧。 上面的结果是:0,2,4,6
@Container/heap list ring vector hash这里这么多结构,没个具体说明,写c++的stl经常用到,要专门开贴,深入了解下
来自《Go语言,互联网时代的C》
附件:http://down.51cto.com/data/2364437
©著作权归作者所有:来自51CTO博客作者zz_yun的原创作品,如需转载,请注明出处,否则将追究法律责任