go语言 学习笔记1

写服务器,天天与各种数据结构打交道。学习go语言已经10天了,还是未能很好应用。写起代码磕磕绊绊。希望写个博客,增加记忆理解。


  1. 对于何时用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》


你可能感兴趣的:(Go)