• 用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语言,爱看网络小说,对算法充满了爱,又身在上海,那不妨找我聊聊,咱也许能一起开开心心的做个好东西出来。

  • 相关阅读:
    前后台分离--概念相关
    dubbo概述
    memcache
    分布式系统事务
    2018书单索引
    Lucene原理之概念
    java 通用对象排序
    LightOJ1214 Large Division —— 大数求模
    LightOJ1336 Sigma Function —— 质因子分解、约数和为偶数
    LightOJ1245 Harmonic Number (II) —— 规律
  • 原文地址:https://www.cnblogs.com/AllenDang/p/3489576.html
Copyright © 2020-2023  润新知