代码改变世界

vitess源码阅读笔记笔记之起因和编码风格

2012-04-05 13:22  ngaut  阅读(1495)  评论(0编辑  收藏  举报

初学golang,找个项目作学习一下

1. why golang?

    这个问题总是免不了无休止的争论,不想多说,如果你有如下体验,自然知道我在说什么,否则也不要问。

    编译巨慢的模板,特别是让人又爱又恨的boost

    逻辑拆分得支离破碎的asio

    侵入性巨强的share_ptr 

    查过项目中内存泄漏,句柄泄漏 

    不受控的异常抛出 

    多线程程序的如履薄冰 

    过多层次的抽象 

2. why not xxx?

    erlang ? 不可否认非常强大,本人也很欣赏二郎的设计,无奈中c的毒太深,不适应erlang的语法 

    scala  ?  尽管很强大,还有自己喜欢的actor,但静态语言设计得有必要这么复杂么,能一眼就看明白代码是干啥的不

    有人说喜欢一个人不需要理由,但讨厌一个人有无数条理由。我要是喜欢golang的理由:

    goroutine, interface, defer, closure, 多返回值,不用敲多于的分号,还有舒服的网络库等。

    不可否认golang目前的缺点也很明显:库还不够完善,gc还不够理想。goroutine调度还不够快,这些慢慢会得到解决的。

    别指望golang是银弹。 

3. why vitess?

    vitess是当前开源的golang项目中规模相对较大的一个项目(严格来说是大部分golang加少量的python) ,而且youtube也在用

 

回到正题先来看看编码风格和设计习惯

      由于vitess的源码也在快速变化,因此这里的日记随时会跟不上官方的代码,但代码风格应该不会有大的变化。

      1.  每个文件夹一个包(package),文件夹名就是包名

  2. new一个struct的函数应该命名为NewXXX,可以看作c++中构造函数
  3. lock用法以及struct上定义方法的习惯
func (self *XXX) Clear() { //这里都是用的self,可能作者是pythoner,估计cpper会写this
self.mu.Lock()
defer self.mu.Unlock() //接下来空一行,表示lock是单独的逻辑,线程安全还是要如履薄冰
....
}

 

关于监控系统运作状态 

vitess的多个模块都通过http的方式导出内部状态(json格式)来辅助调试和监控系统的运行状况 。

        这年头不能通过浏览器监控系统的运作状态都不好意思跟别人讲啊。