1.Go语言在语言级别支持协程,叫goroutine。
那什么是协程呢?
<协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。>
协程更适合于用来实现彼此熟悉的程序组件,如合作式多任务,迭代器,无限列表和管道。
(一个程序可以包含多个协程,可以对比与一个进程包含多个线程,因而下面我们来比较协程和线程。我们知道多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。)
2.协程之间没有互斥与同步!
在执行体之间的消息传递中,互斥与同步存在与线程中
<在Go语言中内置了消息队列的支持,只不过它叫通道(channel)。两 个goroutine之间可以通过通道来进行交互。 >从而不需要互斥与同步。
3.Go语言支持类、类成员方法、类的组合,但反对继承,反对虚函数(virtual function) 和虚函数重载。
确切地说,Go也提供了继承,只不过是采用了组合的文法来提供。
4.Go语言也放弃了构造函数(constructor)和析构函数(destructor)。
5.Go语言中的
接口(interface)与其他语言最大的一点区别是它的非侵入性。
在Go语言中,实现类的时候无需从接口派生。
Go语言的非侵入式接口,看似只是做了很小的文法调整,实则影响深远。
其一,Go语言的标准库再也不需要绘制类库的继承树图。你只需要知道这个类实现了哪些方法,每个方法是啥含义就足够了。
其二,不用再纠结接口需要拆得多细才合理。
其三,不用为了实现一个接口而专门导入一个包,而目的仅仅是引用其中的某个接口的定义。 在Go语言中,只要两个接口拥有相同的方法列表,那么它们就是等同的,可以相互赋值。
6.支持匿名函数与闭包
7.go语言为静态类型语言
可以编译时检查错误