从Node到Go的心路之旅

我最近将一个系统从Node重构到了Go,花了大概两周多的时间,这个过程也是不得已而为之,因为公司开发的系统最终需要部署到客户的服务器,而又不想暴露源码。

但是NodeJs开发的系统却无法从根本上来保护源码,由于JavaScript是个解释型的脚本语言(实际上现在已不是直接解释),因此,即便有各种加壳加密方案,但是运行时还是要解压出源码(即便是在内存)。那么只能把目光投向其他语言了,这个语言首先不能是脚本语言,那么PHP,Python,Ruby就直接Pass掉了;然后是编译成中间字节码的java和C#,貌似会更安全一些,但是还是可以很轻易的被反编译到源码,虽然加壳混淆等技术,但毕竟治标不治本,还是不放心;接下来那就只剩下静态编译型语言了(实际上是指直接编译到机器码的语言),这类语言是直接编译到二进制,执行的时候不需要依赖任何运行时环境,可直接执行编译好的二进制程序,那么想把二进制代码最终反编译到源码,几乎是不可能的,顶多能拿到汇编代码,然后想要根据汇编代码反推逻辑...那我估计他会晕死在半路上,,,因此,终极方案就是采用一种直接编译到机器码的语言进行重构,可选的较成熟语言有:C/C++,Go,Rust,更进一步得讲,只有Go和Rust可选,C/C++就是做底层,做系统的,做web还是想都不要想,Go和Rust相比,明显Go这几年的生态更好一些,做起Web来坑会更少一些。经过各种方案的对比斟酌,我们最终决定采用Golang这门语言对系统进行重构,这样,我们最终发布到客户服务器上的就只是一个可执行文件,以及一些配置文件和静态页面文件,Go源码就无法拿到了。

我使用NodeJs已经有两年了,我不敢说精通,但最起码是相当熟悉了,相当亲切了,这个环境里的一切都是那么自然,那么舒服。可人都有一个弱点,就是在一个熟悉的环境待久了,会本能地抗拒新的环境,新的事物,尤其是成年人。因此,突然来到一个陌生的环境,会有种种不适,会有一段相当艰难的磨合期。感性就是这样,可理性告诉我,为了达到最优目标,应该抛弃原有的偏见和有色眼镜(其实我一直认为用Golang做Web开发不是最优的方案,尽管它是一门很便捷的静态语言),去做该做的事情。

其实每门语言天生就具备了各自不同的基因,都有自己最适用的领域和场景,没有哪门语言可以做到擅长所有方面(虽然JavaScript号称通吃所有领域,PC端,移动端,桌面端,甚至是嵌入式领域,但通吃不代表擅长),旷日持久的语言之争其实就是无所谓的口水战罢了。对于实际的问题和场景,相互配合,各取所长,才是实用之道!尤其是随着最近Docker和微服务的兴起,各语言各技术体系之间可以完美协作,共同组成一个完整系统!和谐社会大家为什么不能和谐相处呢?

JavaScript和Go的本质区别是:一个是无类型的动态语言,一个是强类型的静态语言。这个本质区别也决定了不同的编程体验(虽然Go融入了一些脚本语言的味道),强类型就是强类型,即便搞了个自动类型推断,你也处处摆脱不了类型,你需要多花一些额外精力去把所有变量的类型搞清楚,这对于一个从弱类型语言转过来的人是相当折磨,写起来会让人感觉拖拖拉拉和麻烦,使人无法一心专注业务逻辑,会明显感觉到增加了额外的心智负担。就好像你开惯了自动挡,再回去开手动挡就会觉得很麻烦很累。代码啰嗦重复我都可以忍,可就是这个类型问题真的折磨到我一度想打退堂鼓,看来真的是被弱类型语言“惯坏了”,说句实话:如果不是出于保护代码考虑,我仍会毫不犹豫地选择NodeJs来开发,开发效率实在不是一个级别的。可这就是事实,鱼与熊掌总是不能兼得!!!你想要静态编译的特性,你就得牺牲开发的便捷性。其实从另一个角度想想,Go作为一门静态语言,能做到这步已经算很不错了,想想用C/C++来写业务...,Go已经算是很便捷了。所以,放下抱怨,接受现实吧!

不过令我欣慰的是,Golang这门语言确实有它不可掩盖的优势:1. 系统运行速度明显感觉会快点儿;2. 编译速度挺快,搞个热编译跟Node是一个体验,Ctrl+S瞬间就编译好了;3. 部署方便,干脆利落;4.七牛云开发的Golang嵌入脚本qlang可以极大提高开发便捷性。除了这几个明显的优势外,还有些地方感觉体验不错:代码提示比较完善准确(由于是强类型),因而可以加快一点编码速度,也降低了出错的概率;其次就是生态还行,虽然还比不上Node,但基本常用的工具包都有

记得有句话叫:不要去做你喜欢做的,要去喜欢你现在做的!也确实应该要这样,何必折磨自己,既然别无选择,那就好好去爱!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容