对Go语言了解前,咱们先来补一些基本概念编程
Program Errors数组
trapped errors。致使程序终止执行,如除0,Java中数组越界访问安全
untrapped errors。 出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址网络
Forbidden Behaviours
语言设计时,能够定义一组forbidden behaviors. 它必须包括全部untrapped errors, 但可能包含trapped errors.并发
Well behaved、ill behavedapp
well behaved: 若是程序执行不可能出现forbidden behaviors, 则为well behaved。编程语言
ill behaved: 不然为ill behaved...分布式
强类型与弱类型函数
强类型(strongly typed): 一种语言的全部程序都是well behaved——即不可能出现forbidden behaviors。性能
弱类型(weakly typed): 不然为weakly typed。(存在部分程序有可能出现forbidden behaviors)
动态与静态类型(Dynamically/Statically Typed Language)
静态类型(statically): 在编译时拒绝ill behaved程序。
动态类型(dynamiclly): 在运行时拒绝ill behaved程序。
注意:不能经过“变量类型是否明确声明”来判断是不是静态类型语言。
静态类型语言包括:explicitly typed显式类型 与 implicity typed隐式类型。
你们以为C语言要写int a, int b之类的,Python不用写(能够直接写a, b),因此C
是静态,Python是动态。这么理解是不够准确的。譬如Ocaml是静态类型的,可是也可
以不用明确地写出来。
这里说的Ocaml是静态隐式类型。
动态语言(Dynamic Programming Language)
又叫动态编程语言,是指程序在运行时能够改变其结构:新的函数能够被引进,已有的函
数能够被删除等在结构上的变化。好比众所周知的ECMAScript(JavaScript)即是一个
动态语言。除此以外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于
动态语言。
例子
无类型: 汇编
弱类型、静态类型 : C/C++
弱类型、动态类型检查: Perl/PHP
强类型、静态类型检查 :Java/C#
强类型、动态类型检查 :Python, Scheme
静态显式类型 :Java/C
静态隐式类型 :Ocaml, Haskell
补充几个概念来理解
动态类型语言:意思就是类型的检查是在运行时作的。
静态类型语言:类型判断是在运行前判断。
强类型:一旦一个变量被指定了某个数据类型,若是不通过强制转换,那么它就永远是这个数据类型了。
弱类型:一个变量能够赋不一样数据类型的值。。
注意:是否是动态类型语言与这门语言是否是类型安全的彻底不相干的,不要将它们联系在一块儿!
前几节介绍的是学术界的一种相对“严格”的说法,在补充的概念中,是比较通俗的解释。
(我的理解:经过“类型判断”去拒绝(尝试)“ill behaved”,经过“指定数据类型”去
保证“well behaved”)。
最后上图帮助理解
好累啊,来点轻松的~
这是一个由计算机领域 “发明之父” 所组成的黄金团队,他们对系统编程语言,操做系统和并行都有着很是深入的看法.
Go 语言起源 2007 年,并于 2009 年正式对外发布。
Go 语言在 2010 年 1 月 8 日被 Tiobe(闻名于它的编程语言流行程度排名)宣布为 “2009 年年度语言”
为何要创造一门编程语言?
对比计算机性能的提高,软件开发领域不被认为发展地足够快或者比硬件发展更加成功(有许多项目均以失败了结),同时应用程序的体积始终在不断地扩大,这就迫切地须要一门具有更高层次概念的低级语言来突破现状。
在 Go 语言出现以前,开发者们老是面临很是艰难的抉择,到底是使用执行速度快可是编译速度并不理想的语言(如:C++),仍是使用编译速度较快但执行效率不佳的语言(如:.NET、Java),或者说开发难度较低但执行速度通常的动态语言呢?显然,Go 语言在这 3 个条件之间作到了最佳的平衡:快速编译,高效执行,易于开发。
Go语言的发展目标
Go 语言的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡.(GO语言是一门类型安全(强类型)和内存安全的编程语言。)
Go语言的特性
1.构建速度
动态语言将快速编译做为自身的一大亮点,像 C++ 那样的静态语言通常都有很是漫长的 编译和连接工做。而一样做为静态语言的 Go 语言,经过自身优良的构建机制,成功地 去除了这个弊端,使得程序的构建过程变得微不足道,拥有了像脚本语言和动态语言那样 的高效开发的能力。 Go 语言中另外一个很是重要的特性就是它的构建速度(编译和连接到机器代码的速度), 通常状况下构建一个程序的时间只须要数百毫秒到几秒。C 语言中“头文件”的概念却导 致愈来愈多由于依赖关系而使得构建一个大型的项目须要长达几个小时的时间,而Go 语 言采用包模型这个模型经过严格的依赖关系检查机制来加快程序构建的速度,提供了很是 好的可量测性。
2.垃圾回收
因为内存问题(一般称为内存泄漏)长期以来一直伴随着 C++ 的开发者们,Go 语言的 设计者们认为内存管理不该该是开发人员所须要考虑的问题。所以尽管 Go 语言像其它 静态语言同样执行本地代码,但它依旧运行在某种意义上的虚拟机,以此来实现高效快速 的垃圾回收.
3.协程与通道
Go 语言的另外一个目标是对于网络通讯、并发和并行编程的极佳支持,从而更好地利用大 量的分布式和多核的计算机,这一点对于谷歌内部的使用来讲就很是重要了。设计者经过 goroutine 这种轻量级线程的概念来实现这个目标,而后经过 channel 来实现各个 goroutine 之间的通讯。他们实现了**分段栈增加和 goroutine **在线程基础上多 路复用技术的自动化。