文章目录
最近在学习Go语言,过程中产生一些思考,在这里分享出来。
一、简介
C语言相对而言比较原始,C++语言又过于复杂,对于一部分人而言学习Go语言似乎变成了一件很有性价比的事情。而对于有C/C++基础的同学来说,学习Go语言就变得非常容易。
Go语言,Go Language,简称Golang或Go,是一门由Google公司开发的静态类型、编译型的编程语言。其设计理念是提供一种直观、简洁、可靠的解决方案,以应对现代软件开发中所面临的挑战。
二、设计初衷
Google设计开发Go语言大致基于以下三个方面的原因:
- 计算机硬件技术更新频繁,性能提高很快。目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能。
- 软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。【现有的编程语言: 1.风格不统一; 2.计算能力不够; 3.处理大并发不够好】
- 企业运行维护很多c/c++的项目,c/c++程序运行速度虽然很快,但是编译速度确很慢,同时还存在内存泄漏的一系列的困扰需要解决。
基于以上原因,在Rob Pike, Ken Thompson 和 Robert Griesemer三位大佬的带领下(真的是业界大佬,感兴趣可以搜搜人物经历,每一个拎出来都是计算机届响当当的人物),该项目于2007年启动,并于两年后的2009年11月正式开源。
有一个问题不知你有没有想过:你目前最熟悉的语言是哪一种?它有多久的历史了?
可能它也一直在不断更新,并且被全球开发者广泛使用。但是,摩尔定律告诉我们半导体的发展日新月异,某些之前可能会狠狠制约开发者开发程序的条件(比如内存容量),如今可能早已不复存在;某些之前可能不是很重要的因素,如今可能成为绕不开的话题(比如并发处理)。
相对应的,这些语言在诞生之初的那个时代能够解决当下的问题,但是随着计算机的发展,就算打再多的"补丁",它们也无力提供最完美的解决方案。而这个时候,Go就出现了,作为一门"比较现代"的编程语言,很自然的,它会想办法消除那些"非现代"编程语言犯下的错误(毕竟有些坑已经有人踩过了),并着力解决当下开发者的痛点。
三、语言特点
Go语言保证了既能达到静态语言的安全和性能,又能达到动态语言开发维护的高效率。使用一个表达式来形容Go语言:Go=C+ Python,说明Go语言既有C静态语言程序的运行速度,又能达到 Python 动态语言的快速开发。
- 从C语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,指针等等,也保留了和C语言一样的编译执行方式及弱化的指针。
- 引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。
- 垃圾回收机制,内存自动回收,不需开发人员管理。
- 天然并发(重要特点):
- 从语言层面支持并发,实现简单。
- goroutine,轻量级线程,可实现大并发处理,高效利用多核。
- 基于 CPS 并发模型(Communicating Sequential Processes)实现。
- 吸收了管道通信机制,形成Go语言特有的管道 channel 通过管道 channel,可以实现不同的 goroute之间的相互通信。
- 函数可以返回多个值。
- 新的创新,比如切片,延时执行defer。
四、应用领域
- 区块链研发
- Go服务器端/游戏软件开发
- Golang分布式/云计算软件开发
五、如何学习
说实话,我至今并没有觉得有哪本关于GO编程的书写的比较适合初学者入门,有的过于简单,有的过于深奥,再也找不到一本比较系统性的介绍GO编程的书,再加上GO还很年轻,版本发布的比较勤,一些新的语言特色可能随时会被加入其中,这些因素都对想入门的同学造成了一些困难。
这里推荐以Go By Example程序实践介绍页面作为入门教程,GO 101也是一本比较不错的电子书,还有《The Go Programming Language》(Go语言圣经)等。
一门合格的程序员应该掌握几门编程语言。一方面,你学习不同的语言时会对它们有所比较,这会让你有更多的思考。另一方面,掌握多门编程语言是对学习能力的培养,会让你在学习未来的新技术时学的更快。