网上看到了很多diss Go的程序员,就想发个文章认真的说一下这个现象,也顺便说一下自己的看法。
我是一个入行程序员就就选择go的人,讲讲我为啥当时选择了go。
两年前,也就是17岁时候,当时学校机房是一个几百台电脑的大机房,没有外网,baidu也访问不了,但是有内网局域网,里面的用户是可以直接通信的,上机时候学生们自然是无聊到死,ppt 没人愿意做,互联网有没有只能发愣,所以我就想搞个网站部署在内网访问,让整个机房人浏览,然后就在家里下载了很多电影动漫等,还下载了好多好看的图片,图片浏览,制作了一些唯美的页面,还做了通信功能,当时其实第一选择用python啥的,那时候挺听说Python挺好,但是试了需要安装各种环境下载各种包,机房又没网,用第三方包打包的exe带着各种系统文件,这种系统文件特别小,但是特别多,复制一下需要很久,而且还特别大,上机时间本来就短,去机房安装个解释器编译器配置环境啥的,机房又没网,依赖也下载不了,只能用手机usb共享网络,下载依赖,一节课过去了,没得玩了,所以放弃用python了,java的话比python还要麻烦的多,而且还学习起来,用起来还难得多,所以直接就不考虑了。
当时就在找一门能静态编译成可执行程序,又比较简单,性能又比较好一点的语言,而这个时候我找到了go这门语言,应了那句话,"有时候爱就是从一件小事开始的",他的编译功能彻底的解决了我的任何问题,我当时在家写完程序在家编译生可执行程序放u盘带到机房直接运行,整个流程下来1分钟不到,这时候这种感觉真的太好了,感觉这门语言太符合我的胃口了,干脆利索,不拖泥带水,没有那种藕断丝连的纠缠和依赖,真的是从那时候喜欢上这门语言,因为真的是方便了我的需求。
从那时候我就每次上机带着我都程序上机房,一上课项目就跑起来,我们机房的好多同学都在浏览我写的网站,几乎都在看电影,还记得是泰坦尼克号,斗破苍穹动漫啥的,反正比较符合学生胃口的,还可以局域网聊天,那时候我在机房别提威望有多高了,机房也从那时候开始有活力了,我也在那时候喜欢上编程。
因为go可以说是我的首门语言,算是编程里的母语了,所以语法理念啥的自然是先入go为主,心里自然是以go为标准了。
而在用习惯了go之后再去写其他语言自然会各种不习惯,自然会潜移默化的带着go的语法个和观念去看待其他语言,这样对吗?
可能在我固有的认知里:
声明变量类型就应该跟go一样后置,前置类型是个什么?
语句后还要加分号什么鬼?
函数竟然还不能返回多个值?
case语句每句都加break是什么鬼?true+true+true=3是什么 ?
大括号换不换行还争?
争了60年了,还不休止,甚至上升到宗教级别。

tab缩进几个空格还争?
不是吧还需要看代码规范这种东西?
这语言竟然没有协程?
这语言竟然没有channel?
连defer都没有?
处理异常怎么还能写成嵌套地狱?
竟然不能交叉编译成可执行程序?
等等,算了这语言一无是处。
以上是转其他语言可能会带来的一些问题,关键是这些问题在我这里都不算问题,我也从来不会带着go的那一套规范和思维去diss其他语言,因为我认为他们是可以完成同一件事情的,只是实现的方式不同罢了,声明变量前置后置都是变量,打印helloworld 都能实现啊,你习惯了一门方式以后自然难以接受其他的方式,你去diss另一门语言的方式和风格你觉得合适吗?
据我所知,而且是据我观察,现在入门编程的第一门语言80%几乎都是java,转行程序员的几乎十个里面有8个都是转java,所以可见这些主流语言是占据了话语权,他们的语法自然被大部分程序员熟悉。
而go呢?据我所知,大学生里知道的没几个,没见过有教go课程的大学,转行程序员的没听说过转go的,一大部分转java剩下转前端,而学go的90%以上的都是其他语言转过来的,像我这种入行就学go的几乎没有几个,所以go的语法跟很多语言差别很大,自然就不受大众程序员所接受,其实我也用其他语言,dart,js等等,就拿泛型来说事,其实我本人是不期待go加泛型的,用了这么久真的习惯了,感觉泛型也不是必要的东西(个人观念),当然我算个(⊙o⊙)啥?少数服从多数了,因为毕竟大部分人都是其他语言转过来的,用惯了泛型,那么go没泛型自然符合不了他们的胃口,那就加吧,毕竟不是主流语言,没有多少原生用户,没啥话语权,泛型现在已经有了,只不过我到现在也没急着升级版本去尝试。
其实我喜欢go还有一个地方,是他的强制性规范,大括号不可以换行,变量首字母大写控制作用域,变量不用编译不给过,等等一系列强制规范在我看来是好的,因为我今年刚入职,后端同事是一个5-6年开发经验的go程序员,结果我发现他写的代码和我写的代码完全是一个样子,整个项目几乎就一个模板里印出来一样,我很轻松的就接手项目开发了,不需要看开发规范和代码规范这种东西,当然公司也没有这东西,让你和队友有种种潜移默化的默契,降低了心智负担。
因为我本人也是个flutter开发,刚学flutter时候看阿里巴巴的开源项目里有个600多行的代码规范,教你咋规范成人家的代码,属实是给我整头疼了,

这时候真心觉得强制性规范真的挺好,至今我看github上go的开源项目都没太大压力,大家代码写的都一个模板,看别人代码跟看自己代码一样,看着是真的很好读懂,这种体验真的好多人体会不到。
我用过很多语言,我也不喜欢去说这个语言怎么怎么,这个语言为啥这样搞,真正意义上让我觉得设计有瑕疵的是js这门语言,不太严谨,true+true+true=3,“91”-1=90这种违反了程序设计,不为人知的设计太多了,导致很多程序容易引起安全问题,我觉得这才是需要diss的地方,因为这直接关乎到程序的安全性问题,mongodb在更新过程中放弃了服务端执行js脚本就是因为js不安全,不过好在有了ts这门语言,微软真是干了件好事,弥补了js的一些不足和安全性问题。
说了这么多也不是为了吹go,也不是为了贬低某些语言,我不喜欢去diss其他语言,我也用其他语言,当我去学习其他语言时发现语法或者用法差异很大时,我选择的是适应人家的规范和语法,而不是去理所应当的diss,go也有不足的地方,啥语言都有各自的优点和缺点,每一个语言都有他自己的设计理念,规范,和自己的应用场景,你去看待另一门语言的时候,请多一分理智,少一分傲慢与偏见,存在即合理,不要带着那种先入为主的思想去看待别的语言,不符合老子使用习惯的语言都是**,***! 你用不惯,但是总有人用的惯啊,你喜欢吃苹果但总不能说香蕉不好吧?这不是耍无赖吗?
最后,借用一下Python的名言:
人生苦短,let's go