一、Go语言使用场景
1. 关于go语言
2007年,受够了C++煎熬的Google首席软件工程师Rob Pike纠集Robert Griesemer和Ken Thompson两位牛人,决定创造一种新语言来取代C++, 这就是Golang。出现在21世纪的GO语言,虽然不能如愿对C++取而代之,但是其近C的执行性能和近解析型语言的开发效率以及近乎于完美的编译速度,已经风靡全球。特别是在云项目中,大部分都使用了Golang来开发,不得不说,Golang早已深入人心。而对于一个没有历史负担的新项目,Golang或许就是个不二的选择。
被称为GO语言之父的Rob Pike说,你是否同意GO语言,取决于你是认可少就是多,还是少就是少(Less is more or less is less)。Rob Pike以一种非常朴素的方式,概括了GO语言的整个设计哲学–将简单、实用体现得淋漓尽致。
很多人将GO语言称为21世纪的C语言,因为GO不仅拥有C的简洁和性能,而且还很好的提供了21世纪互联网环境下服务端开发的各种实用特性,让开发者在语言级别就可以方便的得到自己想要的东西。
Go语言是谷歌2009年发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
1.1 开发团队
GO语言的开发阵营可以说是空前强大,主要成员中不乏计算机软件界的历史性人物,对计算机软件的发展影响深远。Ken Thompson,来自贝尔实验室,设计了B语言,创立了Unix操作系统(最初使用B语言实现),随后在Unix开发过程中,又和Dennis Ritchie一同设计了C语言,继而使用C语言重构了Unix操作系统。Dennis Ritchie和Ken Thompson被称为Unix和C语言之父,并在1983年共同被授以图灵奖,以表彰他们对计算机软件发展所作的杰出贡献。Rob Pike,同样来自贝尔实验室,Unix小组重要成员,发明了Limbo语言,并且和Ken Thompson共同设计了UTF-8编码,《Unix编程环境》、《编程实践》作者之一。
2. go语言的特性
自动垃圾回收降低了开发难度
内存和资源管理一直是一个让人非常抓狂的难题。在其他语言(如C或C++)中,使用内存前要先分配这段内存,使用完毕后再将其释放掉,一个小疏忽就可能引发内存泄漏,导致程序甚至系统崩溃。而Go语言的现代化垃圾回收机制显著地降低了开发难度,把无趣的内存管理交给专业的编译器去做,而让程序员专注于更有趣的事情。
支持函数多返回值
目前的主流语言中除Python外基本都不支持函数的多返回值功能,但很多情况下开发者非常需要这个功能。Go语言的多返回值功能让开发者既不用再只为了返回多个值而专门定义一
漂亮的错误处理规范
Go语言引入了defer关键字用于标准的错误处理流程,并提供了内置函数panic、recover完成异常的抛出与捕获。与C++和Java等语言中的异常捕获机制相比,Go语言的错误处理机制可以大量减少代码量,开发者无需再仅为了程序安全而添加大量一层套一层的try-catch语句。
golang不支持try…catch这样的结构化的异常解决方式,因为觉得会增加代码量,且会被滥用,不管多小的异常都抛出。golang提倡的异常处理方式是:
普通异常:被调用方返回error对象,调用方判断error对象。
严重异常:指的是中断性panic(比如除0),使用defer…recover…panic机制来捕获处理。严重异常一般由golang内部自动抛出,不需要用户主动抛出,避免传统try…catch写得到处都是的情况。当然,用户也可以使用panic(‘xxxx’)主动抛出,只是这样就使这一套机制退化成结构化异常机制了。
并发编程
Go语言在并发编程方面比绝大多数语言要简洁不少,这一点是其最大亮点之一,也是其在未来进入高并发高性能场景的重要筹码。
不同于传统的多进程或多线程,golang的并发执行单元是一种称为goroutine的协程。
在当今这个多核时代,并发编程的意义不言而喻。当然,很多语言都支持多线程、多进程编程,但遗憾的是,实现和控制起来并不是那么令人感觉轻松和愉悦。Golang不同的是,语言级别支持协程(goroutine)并发(协程又称微线程,比线程更轻量、开销更小,性能更高),操作起来非常简单,语言级别提供关键字(go)用于启动协程,并且在同一台机器上可以启动成千上万个协程。
网络编程
由于golang诞生在互联网时代,因此它天生具备了去中心化、分布式等特性,具体表现之一就是提供了丰富便捷的网络编程接口,比如socket用net.Dial(基于tcp/udp,封装了传统的connect、listen、accept等接口)、http用http.Get/Post()、rpc用client.Call(‘class_name.method_name’, args, &reply),等等。
编译
运行编译好的Go程序不需要额外安装像java的jdk或者js的node这样的运行环境,同时Go提供了原生的交叉编译支持,跨平台的开发和部署非常方便。
当然编译运行也更容易带来更好的运行效率,不过这方面也不能迷信,越来越多的“解释型”编程语言的运行环境开始支持JIT,这让Go这种编译所带来的性能优势变得没有那么明显。
3. go语言使用场景
「Go」(又称:Golang)是一种怎样的编程语言?
参考URL: https://www.zhihu.com/question/321500270/answer/674270478
鉴于Go语言的特点和设计的初衷,Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web 应用、API应用、下载应用等;除此之外,Go语言还适用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。
服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
分布式系统、数据库代理器、中间件等,例如Etcd。
网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用,而且Go内置的net/http包基本上把我们平常用到的网络功能都实现了。
数据库操作
开发云平台,目前国外很多云平台在采用Go开发。
实现服务器端服务的业务逻辑,是C++,Java,Ruby,Python和Php的很好替代。也可以用来实现高并发的中间件。
二、go语言与其它开源语言比较
开发效率 GO语言使用起来简单、代码描述效率高、编码规范统一、上手快。
1. Go语言设计初衷
开启go 05.Go语言和其他语言的对比
参考URL: https://studygolang.com/articles/24885
Go希望成为互联网时代的C语言。多数系统级语言(包括Java和C#)的根本编程哲学来源于C++,将C++的面向对象进一步发扬光大。但是Go语言的设计者却有不同的看法,他们认为值得学习的是C语言。C语言经久不衰的根源是它足够简单。因此,Go语言也是足够简单。
所以,他们当时设计Go的目标是为了消除各种缓慢和笨重、改进各种低效和扩展性**。Go是由那些开发大型系统的人设计的,同时也是为了这些人服务的;它是为了解决工程上的问题,不是为了研究语言设计;它还是为了让我们的编程变得更舒适和方便。**
但是结合Google当时内部的一些现实情况,如很多工程师都是C系的,所以新设计的语言一定要易学习,最好是类似C的语言;20年没有出新的语言了,所以新设计的语言必须是现代化的(例如内置GC)等情况。最后根据实战经验,他们向着目标设计了Go这个语言。
2. go语言与JAVA
编译语言,速度适中(2.67s),目前的大型网站都是拿java写的,比如淘宝、京东等。主要特点是稳定,开源性好,具有自己的一套编写规范,开发效率适中,目前最主流的语言。
3. go语言与C/C++
C
执行速度快(4.28),学习难度适中,开发速度适中。但是由于c#存在很多缺点,京东、携程等大型网站前身都是用c#开发的,但是现在都迁移到了java上。
C/C++
现存编程语言中的老祖,其他语言皆由此而生。执行速度最快无人能及。但是写起来最为复杂,开发难度大。
从语言的特性来讲,Java与C有较大的差异,而go与C则更为接近。
4. go语言与python
2019年python、golang、java、c++如何选择?
参考URL: https://zhuanlan.zhihu.com/p/65177007
对比学习:Golang VS Python3
参考URL: https://zhuanlan.zhihu.com/p/65613337
Golang和Python都是目前在各自领域最流行的开发语言之一。
Golang其高效而又友好的语法,赢得了很多后端开发人员的青睐,最适用于高并发网络编程的语言之一。
Python不用说,TIOBE排行榜的前十常驻居民,现在已经稳定在前五了。在机器学习、AI、数据分析领域成为必学语言。
与python比,go在性能上占有明显优势,因为解释型语言与编译型语言在运行速度上不可同日而语,另外go在语法简明和类型系统设计上优于python。
性能强劲的同时,开发效率又不差于Python等动态语言。通常比原生 Python 应用还是高一个数量级的,适合编写一些瓶颈业务。内存占用也非常省。
Python
脚本语言,速度最慢(258s),代码简洁、学习进度短,开发速度快。豆瓣就是拿python写的。Python著名的服务器框架有django,flask。但是python在大型项目上不太稳定,因此有些用python的企业后来迁移到了java上。
三、Go语言与其它开源语言比较
go语言需要掌握什么web框架呢?
参考URL: https://www.zhihu.com/question/426948336
[推荐]Go语言框架:Beego vs Gin
参考URL: https://www.imooc.com/video/18655
go类似 spring boot的WEB框架,主要有 gin/beego/gf
gin Gin 是一个用 Go (Golang) 编写的 HTTP web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架, 优于 httprouter,速度提高了近 40 倍。如果你需要极好的性能,使用 Gin 吧。
官方网址:https://gin-gonic.com/
* Beego 作为国人开发的一款框架,它的中文文档相当丰富,同时它的社区也非常丰富。国内很多大企业都在使用beego框架,可以说它的稳定性还是很好的。Beego是一款MVC框架,提供了Restful功能,同时热编译、自动化测试代码以及自动化打包部署都是它受到人们追捧的特点。
四、参考
Rust vs Go:哪个更受欢迎?
参考URL: http://blog.studygolang.com/2020/05/rust-vs-go/
为什么要使用 Go 语言?Go 语言的优势在哪里?