话说程序员每年都应该学习一门新的编程语言。之前学习过lisp、python、java、js、scala。前阵子准备学习一下golang。下面就分享一下学习golang的感受。
背书google,有个好爸爸,可以不用担心后续支持;
几个创作者都是传奇人物,大神,经验丰富,不用担心设计不够好;
静态语言,性能超级好;
简洁,能写出类似js、python一样简洁的代码;
丰富实用的官方库,包括log、http、json、html等不需要依赖第三方库。想想python吧,各种c/c++依赖,有时候用个库能让人抓狂;
自带构建工具,基本上是个全家桶;
eclipse环境下调试、代码提示等,要自己去网上下载gocode.exe、guru.exe、godef.exe、gdb.exe。gdb.exe要注意版本以及32位的还是64位的。有些工具可能下载了也不一定能用,没版本,自己试吧;
未使用的变量和包,会直接编译报错,很不爽,我写代码并不是马上要上到生产环境,经常要写一些测试性的东西,变量删了又加,加了又删,很烦。对上生产的要求严格一点很好,但是能不能区分一下开发环境和生产环境?
包管理,没有版本,这样的设计是不是太简陋了?
函数可见性,同一个目录下的不同文件定义的函数、变量可以相互可见,也就是说这些文件的内容合并到一个文件里面效果是一样一样的。那为什么还要分开到各个文件呢?
动态性,一门静态语言,还能支持反射,挺不错的了,但是有时候动态性太弱真的要写好多重复代码;
不支持泛型,好吧,还不够成熟;
有指针概念但是又不支持指针运算,感觉更好的方式是使用引用,然后提供一个函数用来拷贝对象,可以浅拷贝和深拷贝;
有些地方设计的不一致,比如创建对象,比如传递参数时拷贝的是对象还是指针;
异常处理,和try-catch比,还真的是一种退步;
多返回值,我更喜欢定义一个结构体,返回结构体。反正就是不喜欢参数多时基于位置的对应关系;
杀手级应用,docker是用golang写的。今日头条用它支持每天xx亿的访问量;
总之,还不够成熟,做系统级开发和超高并发挺好,作为第二编程语言的话,对我个人来说nodejs更合适。比较已经有了java这门静态语言了,第二语言用动态语言更好,配合起来解决问题更方便。
有疑问加站长微信联系(非本文作者)