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

从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

我为什么选择Go语言(Golang)相关推荐

  1. call stack是什么错误_Go语言(golang)的错误(error)处理的推荐方案

    原文链接:https://www.flysnow.org/2019/01/01/golang-error-handle-suggestion.html 微信公众号:flysnow_org(飞雪无情) ...

  2. Go语言(Golang)的Web框架比较:gin VS echo

    Go语言(Golang)的web框架比较之:gin vs echo 由 butaixianran 在 2016-01-23 22:00 发布 35423 次点击 原文发在:https://771dia ...

  3. [转]Go语言(Golang)的Web框架比较:gin VS echo

    Go语言(Golang)的web框架比较之:gin vs echo 由 butaixianran 在 2016-01-23 22:00 发布 35423 次点击 原文发在:https://771dia ...

  4. go语言 Golang官网被墙解决办法

    转载自星星的专栏:go语言 Golang官网被墙解决办法https://blog.csdn.net/fer_ba/article/details/9629779

  5. 【Go语言入门100题】022 奇偶分家 (10 分) Go语言 | Golang

    [题解][PTA团体程序设计天梯赛] L1-022 奇偶分家 (10 分) Go语言|Golang 给定N个正整数,请统计奇数和偶数各有多少个? 输入格式: 输入第一行给出一个正整N(≤1000):第 ...

  6. 【Go语言入门100题】038 新世界 (5 分) Go语言|Golang

    [题解][PTA团体程序设计天梯赛] L1-038 新世界 (5 分) Go语言|Golang 这道超级简单的题目没有任何输入. 你只需要在第一行中输出程序员钦定名言"Hello World ...

  7. 【Go语言入门100题】021 重要的话说三遍 (5 分) Go语言 | Golang

    [题解][PTA团体程序设计天梯赛] L1-021 重要的话说三遍 (5 分) Go语言|Golang 这道超级简单的题目没有任何输入. 你只需要把这句很重要的话 -- "I'm gonna ...

  8. 想系统学习GO语言(Golang),能推荐几本靠谱的书吗?

    以下内容来自知乎: 链接:https://www.zhihu.com/question/30461290 学习任何一门语言,都要学习好基础,把基础打牢,那些框架对你来说都是工具,你自己的基础好,懂得了 ...

  9. 【Go语言入门100题】051 打折 (5 分) Go语言|Golang

    [题解][PTA团体程序设计天梯赛] L1-051 打折 (5 分) Go语言|Golang 去商场淘打折商品时,计算打折以后的价钱是件颇费脑子的事情.例如原价¥988,标明打7折,则折扣价应该是 ¥ ...

  10. 【Go语言入门100题】044 稳赢 (15 分) Go语言 | Golang

    [题解][PTA团体程序设计天梯赛] L1-044 稳赢 (15 分) Go语言|Golang 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现要求你编 ...

最新文章

  1. OWASP TOP10(2017)
  2. 建立广域网时使用的拓扑结构是什么?
  3. 如何判断ios设备中是否安装了某款应用
  4. #3771. Triple(生成函数 + 容斥)
  5. java万法_Java I/O库的设计分析
  6. 【BZOJ - 3436】小K的农场(差分约束)
  7. 转载:实用 FRIDA 进阶 --- objection :内存漫游、hook anywhere、抓包
  8. github的gh-pages分支展示项目页面
  9. 使用SQLyog创建简单的触发器
  10. Unix编程艺术之第一部分
  11. 基恩士plc-EtherCAT三十一轴,控制案例程序(包含plc程序/人机界面/BOM表)
  12. 用Java写小学生算术题
  13. latex系列---Latex参考文献的引用
  14. uniapp定位和选择城市
  15. Ubuntu突然无法解析域名解决
  16. Java随机生成验证码
  17. 19. 详解网络请求Axios
  18. 旅游管理要计算机,旅游管理类专业要求
  19. 几个必要的名词解释 光圈 焦距 速度 景深 iso
  20. 高性能服务器性能影响因素

热门文章

  1. 无线传感网络技术与应用项目化教程(一)
  2. 《C++Primer 第五版》——第八章 IO 库
  3. HLS第三十八课(xfopencv,H文件和HPP文件的使用)
  4. mysql删除用户并回收权限
  5. spss主成分综合得分_spss主成分分析怎么算出综合得分
  6. 科技无障碍盛会举办,人工智能和创新成为高频词
  7. 获取手机唯一识别码IMEI
  8. 我的理想计算机作文300字,我的理想作文300字(精选12篇)
  9. ^(?:([^,]*),?){1} 的含义
  10. 数学建模学习(1) 线性规划