Golang实践:历史起源

发布于 2017-09-01 · 本文总共 1779 字 · 阅读大约需要 6 分钟

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起源

golang-his

  • 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




本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。
声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:邱文奇(qiuwenqi)的博客;
内容系本人学习、研究和总结,如有雷同,实属荣幸!
阅读次数:

文章评论

comments powered by Disqus


章节列表