在过去几年,有一门崛起的新语言:Go 或者 GoLang。没有什么比一门新的编程语言更令开发者兴奋了,不是么? 自从我开始学习golang后,我便放弃了我的php大业,虽然php号称“php是世界上最好的语言”,但是通过实战证明,golang更香甜。

为什么要学go语言?

扯太高大上的优势我也说不上来,我就从我切身经历的几个方面说说我为什么学golang吧。这些都是真实的需求对比,它制约着我前进的步伐。
在php开发的时候,我经常遇到一些不太好解决的问题:

  • php只能单线程执行任务,在比如在采集任务中,它需要抓完一个网页,再接着抓第二个网页,这效率严重低下,无法忍受之痛。虽然在服务器上跑可以使用计划任务开多个php进程,但是内存开销又变得太大了。
  • 在用php开发的网站中,url请求的内容只能等服务器端执行完毕才能响应给客户端,无法异步执行。这个问题比较头疼,比如提交的连接要检查页面状态,提交的时候直接检查的话,就需要用户等待较长时间,虽然可以变相使用计划任务配合执行,但是终究不完美,并不是我想要的解决方案。
  • 在php中,如果程序有比较多curl请求网络任务,并且连接迟迟没结束的话,它很容易就导致网站出现502的问题。虽然可以通过设置curl超时时间来降低发生频率,但是它始终是一个悬在头上的问题。
  • 大佬公司都在转go,七牛、阿里、百度、腾讯、头条、京东、哔哩哔哩等。跟上时代步伐,才不会被时代淘汰。
  • 执行速度问题,我只想让网站更快的展示给用户。
    以上的种种,导致了我要寻找一门语言去克服它。通过多方对比后,golang可以完美解决我遇到的问题,所以,我就开始了学习golang之旅。

golang的优势有哪些?

网上很多关于介绍golang优势的文章,无异于都是在说硬件局限性问题、goroutine、直接在硬件上跑、易于维护、google背书等。这些优势我就不再一一重复了,因为大家搜索答案的时候,已经多次看到了,我再补充一些其他优势。

  • 简单好记的关键词和语法。golang语法简单,这个是真的简单,即使从来没接触过过编程的用户,都可以轻松上手,比c++、java更简单易学,甚至比php学起来都轻松。与同为强类型语言的比c++比,更是简单得多。虽然简单,但是实现起功能来,一点也不含糊。
  • 更高的效率。更快的开发效率、更高的编译速度。比java、c++编译速度上快了N个数量级,golang拥有接近C的运行效率和接近php的开发效率。
  • 网络库非常强大,一般大块的功能实现,都有现成的库可以直接使用,不知道库地址都不要紧,你想要什么功能的实现,用浏览器打开github,或网速慢的用户打开gitee,搜索你想要的功能的关键词,选择go项目,基本上都能找到你想要的功能,然后,直接将他的库拉下来使用就可以啦。
  • 严格的依赖管理,本身禁止循环依赖,依赖的管理命令也很简单,go mod 命令就可以解决一切依赖。Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切。编译的时候就将可能埋雷的地方给掐死了,放心,这是一个很好的检查,可以让你的代码更规范。
  • 跨平台交叉编译,直接生成可执行二进制文件发布,比如我只有Windows系统,我依然可以直接编译出在mac、linux上可执行的程序,是不是很爽,省钱能手,还省去了分别部署环境的问题。当然更重要的是,代码不会暴露了,对于商业保护来说,特别是开发php项目,想要代码不被破解,简直是难于登天。这样一下子好了,发布一个执行文件,安全。这一点是很多人选择Go的最大理由,因为部署太方便了,所以现在也有很多人用Go开发运维程序。
  • 并发和异步执行不要太简单,一个go关键词就搞定了。前台提交了个url需要检测,go checkUrl(link)开启一个goroutine让它慢慢跑吧,不要堵住主进程。需要采集的网页数量有点多,一个个循环采集那是要等到何年何月才能采集完啊,开100个chan,100倍的速度跑起来,只要你的带宽足够大,就不怕它跑不快(此处建议拉一根500M带宽的网线)。
  • 严格的语言规范。变量一定要声明,用不到的包不能引进来,大写字母开头的函数、结构体变量是公开访问的,小写的是私有的,没有三目运算,严格的变量类型转换。所有写go的程序员都统一一样的规范,你只能按照这些规范来写代码。从此不再有为标准思前想后、争来吵去了,代码清晰了,可读性高了,可维护性自然就好了。

    gan

golang 总结

golang的背后,真的是google,go的创始者都是大牛,他们开发和开源go出来,就是为了解决已有的老语言无法更高效的为软件开发工作的问题,golang实现了媲美c++的执行速度,比java更简单的语法特点、编译速度接近php语言等,让他成为开发语言中的一个新贵。它让开发变得更加简单。做开发,不就是要追求易学易用嘛。golang再合适不过了。

本教程示例代码存放在GitHub,如果你想看完整代码,可以访问:https://github.com/fesiong/goblog
golang开发技术问题讨论,加入讨论群,可添加我的微信号:no_reg