缘由

很早就听说了Golang的大名,只是远观(当时觉得太难了= =) 刚到公司的时候,研究过一段时间的coreos—-大部分都是Golang写的,还是觉得语法很啰嗦…… 几个月之前,老大就跟我谈过新系统可能用Golang来写,弥补我司只有Python这条技术线的弊端。 所以买了个视频学Golang,但是没有开始上手做东西,只是跟着教程了解了一些特性,然后就荒废了。

由于最近开始研究Python性能提升的可能,异步库gevent,直接的epoll,非拷贝的meoryview各种黑科技都用上,但是并发10K rps实在是没办法跨过的一道坎,索性,反正都是epoll/kevent,直接换Golang试试。

理解

后端开发,如果没有听过,Do not communicate by sharing memory; instead, share memory by communicating.那么你的地位可能就危险了。 前者需要考虑加锁避免race condition,加锁又会提高开发以及调试难度。而后者则可以将对共享memory的访问串行化,于是不用考虑race condition。

放例子

package main  

import "fmt"  
import "time"  

func fibonacci(c, quit chan int) {  

        x, y := 1, 1  

        for {  
                select {  

                        case c <- x:  
                                x, y = y, x+y  

                        case <- quit:  
                                fmt.Println("quit")  
                                return  

                }  
        }  
}  

func show(c, quit chan int) {  

        for i := 0; i < 10; i ++ {  

                fmt.Println(<- c)  
        }  

        quit <- 0  

}  

func main() {  

        data := make(chan int)  
        leave := make(chan int)  

        go show(data, leave)  
        go fibonacci(data, leave)  

        for {  

                time.Sleep(100)  
        }  

}