golang使用感受



golang使用感受

自从4月初到新公司以来,不知不觉使用了5个月的go语言了,开发了一个普通的后台API,一个短链接服务,还用go写了一个搜索引擎,总的感觉非常棒,真的很爽,开发效率和之前的c比起来不知道高了多少倍,而且更舒服的是感觉用起来和c差别不大,指针什么的也都有。


作为一个c和c++的程序员,而且是个老程序员,总希望写代码的时候什么东西都可以自己控制,不知道是不是大部分的c程序员都有这样的感觉,在写某一个函数的时候,一边声明变量一边就想象着这个函数的栈空间是什么样子的,写递归的时候也想着这个栈是如何生长的,是否可以改成尾递归的形式。


用了go以后,感觉有点不一样了,主要体现在下面几个方面。

  • golang实际上不是标准的面向对象的语言,但正因为这样,其实写起代码来自由很多,不用再教条式的使用简单工厂啊,抽象工厂啊等等设计模式,把接口用活就行了。

  • error返回值,这个已经被很多人喷过了,但是这一点我觉得比较对C程序员的味口,没有那么多异常抛出,每个函数都有明确的返回值告诉你成功还是失败,我个人觉得比java那种抛异常要明确不少,虽然代码看上去比较��嗦。

  • 协程管道的使用,大大的提高了生产效率,同时对你的编程思想也有一定的影响,很多事情都会考虑是否能用并行来解决问题,而且这两者的开销都非常小,在初期基本上不用太考虑效率和损耗的问题,这给初学者写服务器端程序提供了很大的帮助。

  • 函数终于变成了一等公民,高阶函数,闭包随便搞,很多新的函数式编程思想也可以比较舒服的用在golang中,同样,这些也是提高生产效率的利器。

  • 第三方资源很多,而且越来越多,但是golang是定义成服务器开发语言的,如果你一定要拿他来做离线数据处理,第三方包肯定比不过python,如果你要拿他来做界面开发肯定也比不过其他开发语言,我觉得golang最适合用来开发web端的API程序,追求速度稳定容易部署跨平台

上面我觉得都是优点,缺点的嘛,我觉得有一条非常明显的缺点:

  • 垃圾回收,有垃圾回收,应该算是个优点,让你不用关心new了的对象什么时候释放,虽然垃圾回收有效率问题,但是效率问题是在慢慢优化中的,1.5以后应该也会改善不少。

  • 可是作为一个老程序员,有些时候(其实是很多时候)你并不知道你的程序的栈空间是什么样子的,而且有垃圾回收的语言,到底用了多少内存你心里是没有底的,特别是作为一个搜索引擎的开发者,当你不确定内存用了多少,特别是不确定内存用在了哪些地方,哪些内存还没释放,心里是感觉非常慌的,真的,不骗你,就是很慌,用惯了c和c++,对程序自己管理内存总不放心,其实并不是不放心,是没有自己管理来得直接,想用了直接new一个,不想用了直接delete,不用管GC,当然,你可以说出一万个有自动垃圾回收的语言的好处,但我也能说出一个自己管理内存的好处:自由。

说了这么一些,总的来说,我个人还是非常推荐golang的。


Read full article from golang使用感受


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts