用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语言,爱看网络小说,对算法充满了爱,又身在上海,那不妨找我聊聊,咱也许能一起开开心心的做个好东西出来。
用Go语言做产品半年的一些感觉的更多相关文章
- [Windows Phone] 以多国语言做为开发前提 (1)
原文:[Windows Phone] 以多国语言做为开发前提 (1) ? 前言 在先前 TechDays 2013 的课程 [开发 Windows Phone 商务应用程式就是这麽快] 中,其中一个部 ...
- 【转】做产品VS做项目
相关定义 根据GB/T19000—2008<质量管理体系基础和术语>,有以下定义 过程process 一组将输入转化为输出的相互关联或相互作用的活动 注:一个过程的输入通常是其他过程的输出 ...
- [Windows Phone] 以多国语言做为开发前提 (2)
原文:[Windows Phone] 以多国语言做为开发前提 (2) ? 前言 在先前的文章 [Windows Phone 开发 - 以多国语言做为开发前提 (1)] 中说明了简单的多国语言范例,今天 ...
- 用R语言 做回归分析
使用R做回归分析整体上是比较常规的一类数据分析内容,下面我们具体的了解用R语言做回归分析的过程. 首先,我们先构造一个分析的数据集 x<-data.frame(y=c(102,115,124,1 ...
- 京东无人超市的成长之路 如何利用AI技术在零售业做产品创新?
随着消费及用户体验的需求升级.人货场的运营效率需求提升.人工智能技术的突破以及零售基础设施的变革等因素共同推动了第四次零售革命的到来,不仅在国内,国外一线巨头互联网亚马逊等企业都在研发无人驾驶.无人超 ...
- 产品相关 做产品VS做项目
做产品VS做项目 by:授客 QQ:1033553122 相关定义 根据GB/T19000—2008<质量管理体系基础和术语>,有以下定义 过程process 一组将输入转化为输出的相互关 ...
- 继续C#开发or转做产品
本人今年大四,C#开发,在一家公司实习了一年后,面临一个选择,是继续C#开发还是转做产品?我C#开发能力目前还一般,但很有兴趣.也喜欢设计与创意,做过产品专员.求大婶们指导!
- 使用R语言预测产品销量
使用R语言预测产品销量 通过不同的广告投入,预测产品的销量.因为响应变量销量是一个连续的值,所以这个问题是一个回归问题.数据集共有200个观测值,每一组观测值对应一种市场情况. 数据特征 TV:对于一 ...
- 想要转行/入行做产品经理,你得先get这些正确姿势
转自:https://mp.weixin.qq.com/s/Bh9QEihdV1JLWwB5I4VJ7Q 参考: 张小龙首次公开演讲(官方无删减版) 前腾讯高级产品经理:如何用“女性思维”做更好的产品 ...
随机推荐
- 【AR实验室】ARToolKit之制作自己的Marker/NFT
0x00 - 前言 看过example后,就会想自己动动手,这里改改那里修修.我们先试着添加自己喜欢的marker/nft进行识别. 比如我做了一个法拉利的marker: 还有网上找了一个法拉利log ...
- 终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了
前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...
- 11、Struts2 的文件上传和下载
文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...
- [译] C# 5.0 中的 Async 和 Await (整理中...)
C# 5.0 中的 Async 和 Await [博主]反骨仔 [本文]http://www.cnblogs.com/liqingwen/p/6069062.html 伴随着 .NET 4.5 和 V ...
- [.NET] C# 知识回顾 - 委托 delegate (续)
C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...
- C#中5步完成word文档打印的方法
在日常工作中,我们可能常常需要打印各种文件资料,比如word文档.对于编程员,应用程序中文档的打印是一项非常重要的功能,也一直是一个非常复杂的工作.特别是提到Web打印,这的确会很棘手.一般如果要想选 ...
- iOS中支付宝集成
iOS中支付宝集成 如今各种的App中都使用了三方支付的功能,现在将我在使用支付宝支付集成过程的心得分享一下,希望对大家都能有所帮助 要集成一个支付宝支付过程的环境,大致需要: 1>公司:先与支 ...
- [斜率优化DP]【学习笔记】【更新中】
参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...
- ucos实时操作系统学习笔记——操作系统在STM32的移植
使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...
- ASP.NET MVC防范CSRF最佳实践
XSS与CSRF 哈哈,有点标题党,但我保证这篇文章跟别的不太一样. 我认为,网站安全的基础有三块: 防范中间人攻击 防范XSS 防范CSRF 注意,我讲的是基础,如果更高级点的话可以考虑防范机器人刷 ...