作为一个以开发为生的程序员,在我心目中编程语言如同战士手里的武器,好与不好主要看使用的人是否趁手、是否适合,没有绝对的高低之分。

从2013年起,学习并使用Golang已经有4年时间了,我想叙述一下我选择Go语言的一些经历,希望能给考虑使用Go的开发者们做些参考。

Golang和其他语言一样并非完美,它有很多优点,也当然有很多缺点

为了避免无谓的语言争论,提前说明一点:Golang并不完美。

我在许多讨论场合中都表达过这样的观点,选择适当的编程语言非常重要,甚至会影响一个程序员的职业发展历程,但是编程语言本身确没有绝对的高低之分。一名武术大师使用狙击枪不仅不能发挥枪的优势,而且可能会影响自己的招式,最重要的是,武术大师可能根本没有使用狙击枪的场景,一把精良的剑可能更适合他。

一些经历

我并非计算机专业科班出身,我学习的是土木工程专业,在学校曾经简单的学习过C语言,但是学校的计算机教育并没有引起我学习编程的兴趣(国内学校的教育方式不扼杀学生的兴趣就算是万幸了)。学习编程的原因是我当时很想搞清楚怎么搭建一个漂亮平面设计网站和论坛,有一个朋友推荐我学习了ASP(用VB语言),在我大学那个时候,搭建一个网站对于大多数人来说还是一个挺神秘的事情。后来又因为懒惰,不想和其他同学一样手绘图纸,于是专心学习了一段时间Lisp,以便于在AutoCAD(一款工程绘图软件)自动绘制图纸。对于编程,我一向是实用主义

大学毕业后,放弃了土木专业的就业方向,正式以编程作为自己的职业,学习不同的编程语言也成为了工作必备的要求。

选择CSharp

一开始,我选择了C#以便于开发.net框架下的应用和网站,这次选择非常有意义,在.net框架下不仅可以开发动态网站,还可以开发各种Windows系统下的视窗程序、控制台和动态链接库,微软提供了非常好用的IDE,对于一个非科班出身的程序员,在.net框架完整的解决方案的帮助下,我尽可能快的接触到了软件开发领域的各个方面。

选择PHP

随着Web2.0概念的提出,我的工作几乎完全是Web开发。在这个领域最被人们津津乐道的语言就是PHP。本来我并不以为然,直到我发现很多优秀的项目都是用PHP开发后,它成功的吸引了我的注意;另一个原因是微软的服务器操作系统和IIS在当时的版本下确实有许多问题,我希望能摆脱微软的控制,将软件部署在Linux或Unix服务器上,LAMP(Linux+Apache+MySQL+PHP)组合方案就是我所需要的。PHP除了拥有学习快,上手容易这些基本的优势外,PHP开源社区非常活跃,你可以轻松的找到各种开源的PHP项目,几乎所有Web相关的开源项目中最著名的都是PHP语言开发的,比如 WordPress、Drupal、PrestaShop、Joomla、Opencart等,数不胜数。

选择Java

后来,我开始带领团队,成为了公司开发团队的小头目,我不能只专心于自己的开发工作,需要考虑整个团队的工作需要。PHP开发公司经营的网站非常有效,但是团队里有一些项目的需求方会要求使用他们指定的开发语言,比如Java。在当时,Java被认为是最稳定、最安全、最标准的解决方案,许多开发领域的大神们也非常推崇Java,J2EE几乎是政府、金融等领域大型项目的标准解决方案。出于市场需要,我不得不让自己和团队学习和掌握Java以便于能够有更多的项目机会。

选择Python

Java本身很优秀,再加上活跃的社区、完善的第三方框架和库,但是总让我觉得太麻烦(或者是我越来越懒),团队常常会有一些简单的工作任务,于是我选择了Python来做这些简单的工作。Python的简单出乎预料,刚开始学习的一段时间,我非常迷恋Python,它让编程变得如此简单,并且它历史悠久,拥有非常丰富的开源资源,Web、桌面、服务器领域的开发都有它的身影。

Python是我非常喜欢的语言,但是它的性能问题是我的心结,尽管如《黑客与画家》作者所说,程序的运行性能往往不是编程语言导致,而且未来计算机硬件的发展速度会让编程语言的性能差异越来越微不足道,但如果能有一门语言能够像Python那么简单又同时具备静态语言的性能岂不更好。

很幸运,我在那段时间,遇到了Golang

选择Go

我非常看重一门语言的入门门槛。我所在的团队并不大,我们需要精打细算每一个时间成本的投入,学习和进步是必须的,但是也需要切实的考量成本问题。

Golang入门非常快,当时我独自学习大概花了一周时间(我还要保持其他工作正常完成),然后我收集整理学习资料,再组织团队的其他成员学习,整个开发团队学习Golang非常的快,无论他们以前擅长Java、C++或是其他语言,都能很快的上手。

我有一个好朋友,曾经共事过一段时间,后来这位朋友专心于前端开发领域。有一次我们讨论团队配合的问题,讨论到前后端API开发的一些事情,当时我提到了Golang,我朋友看了一些简单的介绍和范例后问了我一个问题 “作为脚本语言,Golang与Python、NodeJS比起来有什么优势?”。听到这个问题,我非常高兴,原因是我的朋友把Golang当作了脚本语言(我的这位朋友也有多年的开发经验,而且在前端领域也是相当厉害的大神了),这至少说明作为静态语言的Golang给人的初步影响是简单清晰的,如同脚本语言(动态语言)一样。

Golang的性能很好,根据官方的描述以及其他人的测试结果来看,它的运行性能仅次于C/C++。当然,会有很多人认为这并不绝对有用,性能问题还是得根据具体的代码环境而言,纯粹的循环IO没有意义。不过一个语法上像脚本语言一样简单的高性能静态语言,对程序猿来说还是很有吸引力的。

最后

  • 随着团队和我的成长,我们的项目需要能够运行在不同操作系统的服务器上,甚至有一些需要运行在客户机上,而不需要让用户安装额外的虚拟机或解释器;
  • 现在的需求提供方也更加理性、专业,不再把指定开发语言放在需求清单中;
  • 我们的团队依然不大(就算大,也没有必要浪费),所以我们需要一种编程语言可以同时胜任大型项目开发、日常维护工具开发、Web服务端API开发;
  • 我们需要一种可靠的编程语言,开源、社区发展迅速、有像Google这样的科技巨头的支持

所以,我选择Golang

欢迎大家简书或我的个人博客与我交流

作者:ZetaChow晓代码
链接:https://www.jianshu.com/p/00d22807610d
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

我为什么选择Go语言(Golang)的更多相关文章

  1. Atitit.go语言golang语言的新的特性  attilax总结

    Atitit.go语言golang语言的新的特性  attilax总结 1. 继承树less  动态接口1 1.1. 按照书中说的,Go语言具有以下的特征,下面我们分别来进行介绍.  q 自动垃圾回收 ...

  2. 为什么选择Go语言 GO语言都能做什么产品

    Go语言,又称Golang,是Google开发的一款静态强类型.编译型.并发型,并具有垃圾回收机制的编程语言,它的运行速度非常之快,同时还有如下特性:具有一流的标准库.无继承关系.支持多核:同时它还有 ...

  3. Go语言(golang)新发布的1.13中的Error Wrapping深度分析

    Go 1.13发布的功能还有一个值得深入研究的,就是对Error的增强,也是今天我们要分析的 Error Wrapping. 背景 做Go语言开发的,肯定经常用error,但是我们也知道error非常 ...

  4. Go语言(golang)开源项目大全

    转http://www.open-open.com/lib/view/open1396063913278.html内容目录Astronomy构建工具缓存云计算命令行选项解析器命令行工具压缩配置文件解析 ...

  5. [转]Go语言(golang)开源项目大全

    内容目录 Astronomy 构建工具 缓存 云计算 命令行选项解析器 命令行工具 压缩 配置文件解析器 控制台用户界面 加密 数据处理 数据结构 数据库和存储 开发工具 分布式/网格计算 文档 编辑 ...

  6. 我为什么选择go语言

    这里,我并不打算引起语言争论的口水仗,我并不是什么大牛,对语言的造诣也不深,只是想通过自己实际的经历,来说说为什么我在项目中选择go. 其他语言的经历 C++ 在接触go之前,我已经有多年的c++开发 ...

  7. 人工智能为什么选择Python语言?

    作为新手,在面对广泛应用于企业级应用开发的 Java.游戏客户端开发的 C++.嵌入式开发的 C.人工智能领域的 Python 等数百种编程语言时,你会如何选择自己的第一门编程语言? 作者 | JAC ...

  8. 嵌入式开发为什么选择C语言作为开发语言?

    了解嵌入式开发的朋友们都非常的清楚其核心的开发语言为C语言,C语言在嵌入式开发的过程中占有十分重要的地位,可以说两者之间“你中有我,我中有你”.但是有很多人会想,有那么多的开发语言为什么会单单的选择C ...

  9. Go语言开发

    Go语言圣经(中文版)     Go编程语言规范 搭建Go开发及调试环境(LiteIDE + GoClipse) -- Windows篇           Go开发工具 Go命令行操作命令详细介绍 ...

随机推荐

  1. jQuery-animate万能动画效果

    问题:效果受局限 解决:万能动画函数:animate() animation()可对数值类型的CSS样式执行定时器动画 包括:宽高,位置,透明度,边框宽度,字体大小 强调:不能对非数值类型属性做动画 ...

  2. C#基本知识零散总结

    C#基本知识零散总结 类的属性:(property) C#中定义属性使用的语法 public string SomeProperty { get { return "属性的值"; ...

  3. Glorious Brilliance (最短路 + 带权二分图匹配)

    这是一道代码大题.一开始读错题意了,然后理解成直接看上去的那种相邻,然后想不通好久!!! 把不同联通的图分离出来,然后先预处理一下形成之后的相邻图的状态,然后根据01确定哪一些是需要更换状态的,然后建 ...

  4. Tornado安装

    Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快.得利于其 非阻塞的方式和对 epoll 的运用,Tornado ...

  5. UBuntu sudo 命令 :xxx is not in the sudoers file. This incident will be reported.

    [1]分析问题 提示内容翻译成中文即:用户XXX(一般是新添加的用户名称)没有权限使用sudo. 解决方法修改新用户的权限,具体操作即修改一下/etc/sudoers文件. [2]切换至root用户模 ...

  6. 解决caffe绘制训练过程的loss和accuracy曲线时候报错:paste: aux4.txt: 没有那个文件或目录 rm: 无法删除"aux4.txt": 没有那个文件或目录

    我用的是faster-rcnn,在绘制训练过程的loss和accuracy曲线时候,抛出如下错误,在网上查找无数大牛博客后无果,自己稍微看了下代码,发现,extract_seconds.py文件的 g ...

  7. new sh file

    创建新文件 sbash='#!/bin/bash' sauth='# auth: xiluhua' sdate="# date: $(date +%Y-%m-%d)" shead= ...

  8. 【javascript】内存泄露及其解决办法

    1.内存泄露:一般由于开发者使用不当导致不用的内存没有被操作系统或者空闲内存池回收释放. 2.造成内存泄露的常见原因: 1) 意外的全局变量引起的内存泄露 2)闭包引起的内存泄露 闭包可以维持函数内局 ...

  9. flask 单个表单多个提交按钮

    单个表单多个提交按钮 在某些情况下,可能需要为一个表单添加多个提交按钮.比如在创建文章的表单中添加发布按钮和存草稿的按钮.当用户提交表单时,需要在视图函数中根据按下的按钮来做出不同的处理. 下面例子中 ...

  10. 转:三值逻辑与NULL的处理方式

    来自:<Microsoft SQL SERVER 2008技术内幕 T-SQL查询>P7 在SQL中谓词(逻辑表达式)的可能值为TRUE.FALSE和UNKNOWN.这就是所谓的三值逻辑, ...