zoukankan      html  css  js  c++  java
  • 用Go语言做产品半年的一些感觉

    用Go语言做产品刚好半年,有一些感觉跟大家说道说道。

    在使用Go之前,我常常想象,无法使用先进的Debug工具会对工作进度造成多么巨大的影响。甚至在Visual Studio的娇惯下认为,不能调试基本就无法正确的写出代码了。

    由于我在Windows平台,能够支持Go语言调试的gdb老是无法工作,所以在这半年中,我一次都没有打过断点,也没有开启过一次单步跟踪。刚开始我心里非常没底,只好老老实实为每一个方法写测试代码,每开发完一个功能之后就运行所有测试。这个方法其实也算是家喻户晓的了,但很奇怪,我在写C#的时候并不会自觉地这样做。只有在一些非常特殊的部分会写部分测试代码。

    事后我想了想,懒惰只是其中一个原因,还有一个原因是“编译速度”。众所周知,Go语言的编译速度是非常快的。平时看到这个消息应该没什么感觉,一旦开始写一段就执行一次”编译-》测试“,效果马上就出来了。我的项目目前约有3万行代码,编译速度平均时间2秒。再加上SublimeText3里面方便的GoSublime插件,写完代码 Ctrl+. Ctrol+r,几秒之后就看到结果了。非常方便。

    当然,你可能说这样的事情在Visual Studio里面也很容易能做到,哈,你说的对,但你坚持写一段就来一次试试看,会有被打断的感觉。(我可能有编辑器强迫症,以前喜欢Vim,现在爱SublimeText,总觉得图形化IDE的各种面板很容易让我分神,大家别较真,:P)

    以前每次碰到bug,必须用单步调式跟下去,现在武功被废了,我只能硬着头皮肉眼看代码,不时用print把变量值打出来看看。一段时间之后我发现碰到bug的次数在减少。语言熟练度增加是一方面,但我自认是个粗心的人,况且写了近10年C#也没这种感觉。

    仔细想了想,我觉得是Go语言本身的简洁带来的好处。Go语言的语法和特性就那么点,清清楚楚,没有什么诡异的技巧,也没太多花哨的概念。写之前不需要去看”Go语言注意事项100条“之类的东西。再加上编译器的严格提示(比如声明一个变量不赋值会导致编译无法通过),很大程度上保证了不会因为疏忽而写出”神奇“的代码。

    在这里还得提一下Go语言在问世之初就固执的带上的一个小工具”GoFmt”,它的作用很简单,格式化Go代码。当初我还挺纳闷,这东西可有可无,早期有这时间做点别的什么不好?

    现在明白了,代码的可读性对于程序员来说再重要不过了。这让肉眼找问题舒服了不少。

    所以一套组合拳下来,简洁的语法设计+极好的代码可读性+严格的编译器+内置的测试支持 = 非常舒适的编写体验+高质量的代码。

    大家应该都对“最佳实践”这个词又爱又恨,应该都过这种场景:要实现一个功能,但脑子里出现了两三种实现方式,于是花了很长时间做选择。当然,对系统级的设计,这样做无可厚非。但如果是非常简单的功能,比如“这里究竟应该用指针呢?还是指针的指针呢?还是数组呢?还是链表?“,这种选择的痛苦就显得意义不大了。

    在写Go的时候我很少会被这种问题挡住,不需要考虑这里究竟是传递引用还是传递值,到底是深拷贝还是浅拷贝。不知不觉间编写过程就非常顺滑,真正的专注到了业务逻辑上。大家也可以骂我没出息,这种基础问题还会纠结?水平太差了吧!可是,能用三行代码表达的逻辑,为什么要用十行呢?这个道理大家都懂,嘿嘿,那运用到语言设计上应该也是一样的吧。

    另外一点就是部署上的舒服了。反正Go语言的程序到最后编译出来都是一个可执行文件,跑起来就行了。这句话看起来没什么意义对吧?好,那咱就先来聊聊如何部署一个网站,安装Apache,安装xxxMod(比如Python和Ruby),配置xxx(此处省略200字),中间还要注意各个模块的版本哦,否则遇到各种不明白的错误还得抓掉无数头发。

    Go语言呢?编译,运行。什么?恩,就是这么简单。不要Apache或者其他Http服务器了?不要。那不是很不科学?呃,是有点魔幻。

    以前一直觉得IIS和Apache都是很黑很大的一坨东西,里面全是超科技,配置文件也很高深,高人过来这里改改那里改改默默的性能就提高了n倍。

    刚开始还觉得一个可执行文件孤零零的跑起来好单薄,等理解的更多之后就发现其实Http服务器的核心概念就这么几个,Go语言内置支持了,所以这么轻便就能跑了。

    不觉得厉害?恩,考虑一下更新代码的场景呢?关闭实例,更新代码,编译,运行(更新时间如何让服务不间断咱先不讨论,这需要其他服务器配合)。很省心。

    特别像我这种windows程序员,本来面对linux的时候就各种心惊胆颤,各种不熟悉,要是让我再去修改修改文件夹权限什么的我就炸了。

    好吧,唠唠叨叨说了一堆,总结下来就一点。我已经从Go语言的粉丝变成死忠了(所以大家也不用费口舌来跟我辩论了哈哈),看到Go语言就开心,写着舒心,用着顺心。

    你要是看到这儿了,那就顺便提一句,我们打算在1月份召一个Go语言的服务器端工程师,如果你碰巧喜欢Go语言,爱看网络小说,对算法充满了爱,又身在上海,那不妨找我聊聊,咱也许能一起开开心心的做个好东西出来。

  • 相关阅读:
    PAT (Advanced Level) 1010. Radix (25)
    PAT (Advanced Level) 1009. Product of Polynomials (25)
    PAT (Advanced Level) 1008. Elevator (20)
    PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)
    PAT (Advanced Level) 1006. Sign In and Sign Out (25)
    PAT (Advanced Level) 1005. Spell It Right (20)
    PAT (Advanced Level) 1004. Counting Leaves (30)
    PAT (Advanced Level) 1001. A+B Format (20)
    PAT (Advanced Level) 1002. A+B for Polynomials (25)
    PAT (Advanced Level) 1003. Emergency (25)
  • 原文地址:https://www.cnblogs.com/AllenDang/p/3489576.html
Copyright © 2011-2022 走看看