Golang实践:历史起源
Go语言是一种开源的程序设计语言,它意在使人们能够方便地构建简单、可靠、高效的软件;—golang.org
发展历史
Go语言在2007年9月形成构想,于2009年11月发布,当年就被选为TIOBE年度语言;
发明人:Robert Griesemer、Rob Pike和Ken Thompson
2012年,发布1.0版本,推广速度突飞猛进;
特点
和C比较相似,但远不止是C的升级版;
基于多种其他语言,取其精华、去其糟粕;
实现并发功能的设施是全新的、高效的;
实现数据抽和面向对象的途径是极其灵活的;
实现了自动化的内存管理(垃圾回收);
不仅特别适用于创建基础设施类软件(如网络服务),以及程序员使用的工具和系统等;—取代C
而且是一种通用语言,在很多领域中得到应用(图像处理、移动应用、机器学习等);—取代java
另外,在很多场合可以替代无类型的脚本语言,因为Golang兼顾了表达力和安全性:Golang通常比动态语言运行要快,由于意料之外的类型错误而导致崩溃的情形少的多;—取代Python
Golang是一个开源项目,其编译器、库、工具的源代码是人人皆可免费取得的; 来自世界的社区都在积极的向这个项目贡献代码;
Golang的运行环境包括类UNIX系统–Linux、FreeBSD、OpenBSD、和Mac OS; 还有Plan 9;以及Microsoft Windows; 只要在其中一个环境中写了一个程序,那么基本上不加修改就可以运行在其他环境中;
应用领域
基础架构领域:
比较有名的项目:ETCD、Kubernetes、Docker;
数据库领域:TiDB,InfluxDB;
消息系统:NSQ;
缓存系统:GroupCache;
基础架构的主流语言
在基础架构领域,最早只有C语言,后来有了C++;在性能不受影响的情况下,C++语言可以驾驭规模更大、更复杂的项目,不如MySQL、MongoDB;
尽管C++功能强大,但并没有太好的解决代码的易用性和健壮性相互平衡的问题,所以java出现了,例如整个Hadoop生态;
在这之后,随着高并发需求的逐步增强,不少针对高并发设计的语言流行起来;
比如:
Erlang:RabbitMQ;
Scala:Apache Spark;
Rust:Mozilla基金会推出;
从目前的状态来看,Go语言取得的成就远高于其他三种语言;
未来哪种语言会成为新的基础架构语言还不可知,但高并发肯定是一个必备的特性;
服务端:
Beego、Gorilla、Gin等web框架
Golang起源
-
C语言:
表达式语法、控制流语句、基本数据类型、按值调用的形参传递、指针; 编译成高效的机器码,并自然地与所处的OS提供的抽象机制相配合; -
Modula-2:
包概念; -
Oberon:
消除了模块接口文件和模块实现文件之间的差异; -
Oberon-2:
包、导入、声明的语法,提供方法声明的语法;
CSP:
Communicating Sequential Process
CSP由Tony Hoare于1978年在发表的关于并发性基础的开创性论文中提出;
在CSP中,程序就是一组无共享状态进程的并行组合,进程间的通信和同步通过通道完成;
Rob Pike等人把CSP实现为真正的语言;第一种这样的语言称为Squeak,是一种用于处理鼠标和键盘事件的语言;其中具有静态创建的通道; 紧接着出现Newsqueak,它具有类C的语句和表达式语法,以及类Pascal的类型标记;是一种纯粹的函数式语言;
Go项目设计哲学
1.保持极端简单性的行为文化;复杂性是以乘积方式增长的;只有通过设计上的简单性,系统才能在增长过程中保持稳定、安全和自洽;
2.提倡充分利用当代计算机系统设计,尤其强调局部性的重要意义; 其内置数据类型和大多数库数据都经过仔细设计,力求以自然方式工作,而不要求显式的初始化或隐式的构造函数;
基于CSP的并行特性;
提供变长栈来运行其轻量级线程(goroutine),这个栈初始时非常小,所以创建一个goroutine的成本极低,创建100万个也完全可以接受;
3.Go标准库被称作“自带电池的语言”,它提供了清晰的构件,以及用于IO、文本处理、图形、加密、网络、分布式应用的API,而且对许多标准文件格式和协议都提供了支持;
Go的库和工具充分的尊重惯例,避免了配置和解释,简化处理逻辑
refs
https://golang.org