yuyongbo


Go语言起源

1.对Go语言的设计产生了重要影响的早期的编程语言图示

image.png

C语言

表达式语法、控制流结构、基础数据类型、调用参数传值、指针等很多思想。编译后机器码的运行效率以及和现有操作系统的无缝适配。

Modula-2语言包的概念
Oberon语言摒弃了模块接口文件和模块实现文件之间的区别,面向对 象特性所提供的方法的声明语法等。
Oberon-2语言影响了包的导入和声明的语法
APL语言iota语法
Scheme语言和其他很多语言词法作用 域与嵌套函数
Squeak、Newsqueak语言CSP模型


更多语言特性来源https://talks.golang.org/2012/concurrency.slide#9

Go语言项目


所有的编程语言都反映了语言设计者对编程哲学的反思,通常包括之前的语言所暴露的一些不足地方的改进。


正如Rob Pike所说,“软件的复杂性是乘法级相关的”,通过增加一个部分的复杂性来修复问题通常将 慢慢地增加其他部分的复杂性。通过增加功能和选项和配置是修复问题的最快的途径,但是这很容易让人忘记简洁的内涵,即使从长远来看,简洁依然是好软件的关键因素。


简洁的设计需要在工作开始的时候舍弃不必要的想法,并且在软件的生命周期内严格区别好的改变或坏 的改变。通过足够的努力,一个好的改变可以在不破坏原有完整概念的前提下保持自适应,正如Fred Brooks所说的“概念完整性”;而一个坏的改变则不能达到这个效果,它们仅仅是通过肤浅的和简单的 妥协来破坏原有设计的一致性。只有通过简洁的设计,才能让一个系统保持稳定、安全和持续的进化


Go特性对比


Go拥有的特性Go没有的特性
拥有自动垃圾回收没有隐式的数值转换
一个包系统没有构造函数和析构函数
函数作为一等公民没有运算符重载
词法作用域没有默认参数
系统调用接口也没有继承
只读的UTF8字符串没有泛型
CSP的并发特性支持没有异常
轻量级线程goroutine没有宏
强大的标准库没有函数修饰
Go语言自带工具更没有线程局部存储