网红语言 GO 飞到风口啦,快快一起了解下吧!

266 阅读6分钟

GO 语言简介

引用 wiki Go - 维基百科(wikipedia.org)

Go(又称Golang)是Google开发的一种静态强类型编译型并发型,并具有垃圾回收功能的编程语言

罗伯特·格瑞史莫罗勃·派克肯·汤普逊于2007年9月开始设计Go稍后伊恩·兰斯·泰勒(Ian Lance Taylor)、拉斯·考克斯(Russ Cox)加入项目。Go是基于Inferno操作系统所开发的。Go于2009年11月正式宣布推出,成为开放源代码项目,支持LinuxmacOSWindows等操作系统。

在2016年,Go被软件评价公司TIOBE选为“TIOBE 2016年最佳语言”

目前,Go每半年发布一个二级版本(即从a.x升级到a.y)。

Q & A

  • 问:既有的语言很多,为何还要设计Go语言?
  • 答:设计Go语言是因为Java和C++ 等传统语言繁琐、缓慢而难以理解。Go语言的设计者借鉴了Python动态类型语言的优点,旨在打造一款易于使用并可用于开发高流量生产系统的语言。
  • 问:编译器生成的可执行文件很大,但源代码文件很小。为何会这样?
  • 答:在编译器生成的二进制文件中,必须包含执行程序所需的一切。这带来的缺点是二进制文件比源代码文件大,但优点是无须安装依赖就能运行程序。

主要应用场景

分布式应用

Golang 是非常适合在分布式应用场景下开发的。分布式应用的主要目的是尽可能多的利用计算资源和网络带宽,以求最大化系统的整体性能和效率,其中重要的需求功能就是并发(Concurrency)。而 Go 是支持高并发异步编程方面的佼佼者。前面已经提到,Go 语言内置了协程(Goroutine)* 通道(Channel)两大并发特性,这使后端开发者进行异步编程变得非常容易。Golang 中还内置了 sync ,包含 Mutex (互斥锁)、 WaitGroup (等待组)、 Pool (临时对象池)等接口,帮助开发者在并发编程中能更安全的掌控 Go 程序的并发行为。Golang 还有很多分布式应用开发工具*,例如分布式储存系统(Etcd、SeaweedFS)、RPC 库(gRPC、Thrift)、主流数据库 SDK(mongo-driver、gnorm、redigo)等。这些都可以帮助开发者有效的构建分布式应用。

网络爬虫

稍微了解网络爬虫的开发者应该会听说过 Scrapy,再不济也是 Python。市面上关于 Python 网络爬虫的技术书籍数不胜数,例如崔庆才的《Python 3 网络开发实战》和韦世东的《Python 3 网络爬虫宝典》。用 Python 编写的高性能爬虫框架 Scrapy,自发布以来一直是爬虫工程师的首选。

不过,由于近期 Go 语言的迅速发展,越来越多的爬虫工程师注意到用 Golang 开发网路爬虫的巨大优势。其中,用 Go 语言编写的 Colly 爬虫框架,如今在 Github 上已经有 13k+ 标星。其简洁的 API 以及高效的采集速度,吸引了很多爬虫工程师,占据了爬虫界一哥 Scrapy 的部分份额。前面已经提到,Go 语言内置的并发特性让严重依赖网络带宽的爬虫程序更加高效,很大的提高了数据采集效率。另外,Go 语言作为静态语言,相对于动态语言 Python 来说有更好的约束下,因此健壮性和稳定性都更好。

后端 API

Golang 有很多优秀的后端框架,它们大部分都非常完备的支持了现代后端系统的各种功能需求:RESTful API、路由、中间件、配置、鉴权等模块。而且用 Golang 写的后端应用性能很高,通常有非常快的响应速度。笔者曾经在开源爬虫管理平台 Crawlab 中用 Golang 重构了 Python 的后端 API,响应速度从之前的几百毫秒优化到了几十毫秒甚至是几毫秒,用实践证明 Go 语言在后端性能方面全面碾压动态语言。Go 语言中比较知名的后端框架有 GinBeegoEchoIris

Golang非常适合用来做网络并发方面的服务,比如消息推送、监控、容器等。国内外的很多著名公司都使用了Go语言来开发服务及应用,比如:

  • Google最核心的搜索和广告业务;
  • 腾讯的Docker容器化
  • 百度的运维BFE(Baidu Front End)项目,应对庞大的前端页面访问量。
  • 小米的运维监控系统,小米商城、小米视频等团队也在使用Go语言

优缺点概述

前面介绍了 Go 的语言特性,想必已经对 Golang 有了一些基本的了解。其中的一些语言特性也暗示了它相对于其他编程语言的优缺点。Go 语言虽然现在很火,在称赞并拥抱 Golang 的同时,不得不了解它的一些缺点。

特性优点缺点
语法简单提升开发效率,节省时间难以处理一些复杂的工程问题
天然支持并发极大减少异步编程的难度,提高开发效率不熟悉通道和协程的开发者会有一些学习成本
类型系统Go 语言是静态类型,相对于动态类型语言更稳定和可预测IOP 鸭子类型比严格的 OOP 语言更简洁没有继承、抽象、静态、动态等特性 ; 缺少泛型,导致灵活性降低;难以快速构建复杂通用的框架或工具
错误处理强制约束错误管理,避免 “try/catch 一把梭”啰嗦的错误处理代码,充斥着 if err := ...
编译迅速这绝对是一个优点怎么可能是缺点?
非常规依赖管理可以直接引用发布到 Github 上的仓库作为模块依赖引用,省去了依赖托管的官方网站;可以随时在 Github 上发布 Go 语言编写的第三方模块;自由的依赖发布意味着 Golang 的生态发展将不受官方依赖托管网站的限制严重依赖 Github,在 Github 上搜索 Go 语言模块相对不精准
非常规日期格式按照 6-1-2-3-4-5(2006-01-02 15:04:05),相对来说比较好记对于已经习惯了 yyyy-MM-dd HH:mm:ss 格式的开发者来说非常不习惯

总结

GO 语言虽然年轻,但是因为其优秀的设计以及背靠 Google大山,收到了众多开发者们的青睐,如果你对 后端开发、网络爬虫等方面开发有兴趣的话,建议了解一下。

大红大紫的 Golang 真的是后端开发中的万能药吗?

《Go语言精进之路:从新手到高手的编程思想、方法和技巧 》

好了,今天的内容就到分享这里啦,很享受与大家一起学习,沟通交流问题,如果喜欢的话,请为我点个赞吧 !👍

作者:chenuvi

邮箱: chenui@outlook.com