Go语言与其它编程语言的对比
近年来,Go语言在国内的知名度越来越高,使用量也在爆发式增长,那么和其他的编程语言相比Go语言到底有哪些优势和不足呢?本节我们就来聊聊。
根据 Google 当时内部的一些实际情况,比如大部分工程师使用的都是C语言,所以新设计的语言最好跟C语言类似,而且要简单易学。另外,因为已经有二十年左右的时间没有出现新的编程语言了,所以新设计的语言一定要足够现代化(例如内置 GC),因此才出现了现在的Go语言。
在Go语言问世后,很多人将它称为 21 世纪的C语言,因为Go语言不仅拥有C语言的简洁和性能,还拥有媲美解释型语言的开发效率以及近乎于完美的编译速度,同时还很好的提供了 21 世纪互联网环境下服务端开发的各种实用特性。
1) 学习成本低,因为Go语言语法相对简单,同时包含了许多类似C语言的语法,所以Go语言学起来非常容易,开发人员可以很轻松的开发出高性能的应用。在国内大家都追求效率,讲究一个“快”字,这也是Go语言在国内比较流行的原因之一。
2) Go语言的编译速度快,而且运行效率高。相对于 Java 和 C++ 而言,Go语言在编译速度方面占据着绝对的优势,同时Go语言还拥有着接近C语言的运行效率和媲美解释型语言的开发速度。
3) Go语言的标准库非常丰富,主要包括互联网应用、系统编程和网络编程等方面。Go语言的标准库中包含了绝大多数的常用库,虽然有些库并不是很好用,但随着Go语言的不断发展,相信这些问题最终都会被解决掉。
4) Go语言从语言层面实现了并发编程,并且使用起来比绝大多数编程语言要简洁,在当今这个多核心的时代,并发编程的意义不言而喻,这也是Go语言最大的亮点之一。
1) Go语言中的包管理并不完美。为 Go 添加某个依赖时仅仅只是将依赖项的源代码库拷贝到 GOPATH 中,但是使用什么版本呢?如果不同项目需要不同版本的依赖项怎么办呢?没办法。Go语言中版本的概念基本上等于不存在。相比之下 Python、NodeJS(npm)和 Ruby 都有相对维护良好的包管理系统。
2) Go语言不支持泛型,对于大多数静态类型语言(如 C++、Java 等)来说都是支持泛型的,这无疑会使得从 Java 或 C++ 语言转向Go语言的开发者感到不爽。
3) Go语言第三方库的数量还远远不及其他几门主流语言(比如 Java、Python、Ruby 等)。不过与Go语言的年纪相比,用它实现的第三方库已经相当多了,并且它们的数量在持续地飞速增长中。
4) 另外,Go语言网络资源比较匮乏,虽然网上也有不少关于Go语言的帖子,但是有价值的并不多,针对某个问题搜索到的答案往往都是些重复的内容,这点很让人上火。
总之,没有十全十美的编程语言,虽然Go语言还有一些瑕疵,但从整体来看,它已经是一门非常优秀的通用编程语言了。
Go语言的设计初衷
2007 年,受够了 C++ 煎熬的 Google 首席软件工程师 Rob Pike 纠集 Robert Griesemer 和 Ken Thompson 两位牛人,决定创造一种新语言来取代 C++。根据 Google 当时内部的一些实际情况,比如大部分工程师使用的都是C语言,所以新设计的语言最好跟C语言类似,而且要简单易学。另外,因为已经有二十年左右的时间没有出现新的编程语言了,所以新设计的语言一定要足够现代化(例如内置 GC),因此才出现了现在的Go语言。
在Go语言问世后,很多人将它称为 21 世纪的C语言,因为Go语言不仅拥有C语言的简洁和性能,还拥有媲美解释型语言的开发效率以及近乎于完美的编译速度,同时还很好的提供了 21 世纪互联网环境下服务端开发的各种实用特性。
Go语言的优势
Go语言借鉴了很多编程语言的优点,并运用到了自身当中。下面我们来看看与其他主流语言相比,Go语言具有的优势。1) 学习成本低,因为Go语言语法相对简单,同时包含了许多类似C语言的语法,所以Go语言学起来非常容易,开发人员可以很轻松的开发出高性能的应用。在国内大家都追求效率,讲究一个“快”字,这也是Go语言在国内比较流行的原因之一。
2) Go语言的编译速度快,而且运行效率高。相对于 Java 和 C++ 而言,Go语言在编译速度方面占据着绝对的优势,同时Go语言还拥有着接近C语言的运行效率和媲美解释型语言的开发速度。
3) Go语言的标准库非常丰富,主要包括互联网应用、系统编程和网络编程等方面。Go语言的标准库中包含了绝大多数的常用库,虽然有些库并不是很好用,但随着Go语言的不断发展,相信这些问题最终都会被解决掉。
4) Go语言从语言层面实现了并发编程,并且使用起来比绝大多数编程语言要简洁,在当今这个多核心的时代,并发编程的意义不言而喻,这也是Go语言最大的亮点之一。
Go语言的劣势
下面,我们来客观地看一下目前Go语言需要加强或改进的地方。1) Go语言中的包管理并不完美。为 Go 添加某个依赖时仅仅只是将依赖项的源代码库拷贝到 GOPATH 中,但是使用什么版本呢?如果不同项目需要不同版本的依赖项怎么办呢?没办法。Go语言中版本的概念基本上等于不存在。相比之下 Python、NodeJS(npm)和 Ruby 都有相对维护良好的包管理系统。
2) Go语言不支持泛型,对于大多数静态类型语言(如 C++、Java 等)来说都是支持泛型的,这无疑会使得从 Java 或 C++ 语言转向Go语言的开发者感到不爽。
3) Go语言第三方库的数量还远远不及其他几门主流语言(比如 Java、Python、Ruby 等)。不过与Go语言的年纪相比,用它实现的第三方库已经相当多了,并且它们的数量在持续地飞速增长中。
4) 另外,Go语言网络资源比较匮乏,虽然网上也有不少关于Go语言的帖子,但是有价值的并不多,针对某个问题搜索到的答案往往都是些重复的内容,这点很让人上火。
总之,没有十全十美的编程语言,虽然Go语言还有一些瑕疵,但从整体来看,它已经是一门非常优秀的通用编程语言了。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算