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

从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. Linux常用网络工具:Http压力测试之ab

    ab的全称是Apache Bench,是Apache自带的网络压力测试工具,相比于LR.JMeter,是我所知道的 Http 压力测试工具中最简单.最通用的. ab命令对发出负载的计算机要求很低,不会 ...

  2. asp.net webapi 404/或无效控制器/或无效请求 截取处理统一输出格式

    public static class PreRouteHandler     {         public static void HttpPreRoute(this HttpConfigura ...

  3. C# JArray与JObject 的使用

    STEP1.using Newtonsoft.Json.Linq; STEP2 如何获取json里的某个属性(节点)值,对其删改,新增 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  4. linux打包压缩与搜索命令

    1.tar命令 tar命令用于对文件进行打包压缩或解压,格式为“tar [选项] [文件]”.  tar命令的参数及其作用 参数 作用 -c 创建压缩文件 -x 解开压缩文件 -t 查看压缩包内有哪些 ...

  5. scu 4439 Vertex Cover

    题意: 给出n个点,m条边,将若干个点染色,使得每个边至少有一点染色,问至少染多少个点. 思路: 如果是二分图,那就是最小点覆盖,但是这是一般图. 一般图的最小覆盖是npc问题,但是这题有一个条件比较 ...

  6. IoC, DI,Spring.net

    IoC : Inversion of Control , 控制反转,就是创建对象(实例)的权利由开发人员自己控制New转到了由容器来控制.实现了解耦. DI: Dependency Injection ...

  7. redis 性能建议

    因为 RDB 文件只用作后备用途,建议只在 Slave 上持久化 RDB 文件,而且只要15分钟一次就够了,只保留 save 900 1 这条规则. 如果 Enable AOF,好处是在恶劣请看下也只 ...

  8. sklearn异常检测demo

    sklearn 异常检测demo代码走读 # 0基础学python,读代码学习python组件api import time import numpy as np import matplotlib ...

  9. Hue中hive(hive cli)查询结果中显示列名,不带表名

    hive cli中显示列名 进入hive cli后 set hive.cli.print.header=true; 之后出现列名,但是带了表名前缀,由于网上没找到资料,于是到官网肉眼扫描所有参数,总算 ...

  10. Linux下MySQL远程链接配置

    配置步骤: 1).首先进入数据库,使用系统数据库mysql mysql -u root -p mysql 2).接着对系统数据库的root账户设置远程访问的密码,与本地的root访问密码并不冲突 gr ...