Atitit.go语言golang语言的新的特性 attilax总结
1.1. 按照书中说的,Go语言具有以下的特征,下面我们分别来进行介绍。 q 自动垃圾回收 q2
1. 继承树less 动态接口
编程语言作为工具和其他所有工具的目的是一样的,就是为了提高生产力。Go语言也不例外,Go语言也有GC、也支持Erlang式的轻量级并发,Go语言最有价值的地方是对现有OOP的改进,现在无论什么语言只要支持OOP就一定会有一个庞大的继承树,但是无论这个树设计的多庞大多精巧它仍然是一个静态的结构,一旦和实际问题不匹配就要写一堆Adapter。而Go语言采用完全不用的方法,类之间不存在静态的继承或者实现关系,这种关系直到使用它的时候才确定,比如java中FileInputStream实现了InputStream接口,这个关系在定义FileInputStream的时候就要确定,而Go语言中定义FileInputStream时不需要指定它要实现的接口,如果这个类里面实现的方法刚好和满足InputStream那你就可以认为实现了InputStream接口。这种实现方式意味着Go语言不再有传统的OOP存在的各种烦恼,同时又提供了相同的表达能力,而且更优雅。
图灵等价的编程语言之间不存在一个语言能解决而另外一个语言不能解决的问题,只能说一个语言比另外一个语言解决某种问题更优雅,Go语言因对OOP做的创新,在对象建模上更容易,类似Erlang的并发某行让开发高并发网络应用时可以大幅降低逻辑复杂性。
.
1.1. 按照书中说的,Go语言具有以下的特征,下面我们分别来进行介绍。
q 自动垃圾回收
q
作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
1.2.
1.3. 更丰富的内置类型
1.4. . 更丰富的内置类型
其实作为一种新兴的语言,如果仅仅是为了某种特定的用途那么可能其内置类型不是很多,仅需要能够完成我的功能即可,但是Go语言“不仅支持几乎所有语言都支持的简单内置类型(比如整型和浮点型等)外,还支持一些其他的高级类型,比如字典类型,map要知道这些类型在其他语言中都是通过包的形式引入的外部数据类型。数组切片(Slice),类似于C++ STL中的vector,在Go也是一种内置的数据类型作为动态数组来使用。这里满有一个颇为简单的解释:”既然绝大多数开发者都需要用到这个类型,为什么还非要每个人都写一行import语句来包含一个库?”
q
1.5. 错误处理 defer
defer、panic和recover,其中使用defer关键字语句的含义是不管程序是否出现异常,均在函数退出时自动执行相关代码。
所以上面你的java代码用Go进程重写只有两行:
conn := ...
defer conn.Close()
所以“Go语言的错误处理机制可以大量减少代码量,让开发者也无需仅仅为了程序安全性而添加大量一层套一层的try-catch语句。这对于代码的阅读者和维护者来说也是一件很好的事情,因为可以避免在层层的代码嵌套中定位业务代码。”
q
1.6. 匿名函数和闭包
q
1.7. 类型和接口 非侵入型”接口的概念。
可以看出,“虽然Bird类型实现的时候,没有声明与接口IFly的关系,但接口和类型可以直
接转换,甚至接口的定义都不用在类型定义之前,这种比较松散的对应关系可以大幅降低因为接
口调整而导致的大量代码调整工作”。
Go语言最让人赞叹不易的特性,就是interface的设计。任何数据结构,只要实现了interface所定义的函数,自动就implement了这个interface,没有像Java那样冗长的class申明,提供了灵活太多的设计度和OO抽象度,让你的代码也非常干净。千万不要以为你习惯了Java那种一条一条加implements的方式,感觉还行,等接口的设计越来越复杂的时候,无数Bug正在后面等着你。
同时,正因为如此,Go语言的interface可以用来表示任何generic的东西,比如一个空的interface,可以是string可以是int,可以是任何数据类型,因为这些数据类型都不需要实现任何函数,自然就满足空interface的定义了。加上Go语言的type assertion,可以提供一般动态语言才有的duck typing特性, 而仍然能在compile中捕捉明显的错误。
1.8. q 并发编程
Go 关键字,类似C#的async和await
Java的future模式..
毋庸置疑,Go语言对并发编程的支持是天生的、自然的和高效的。Go语言为此专门创造出了一个关键字“go”。使用这个关键字,我们就可以很容易的使一个函数被并发的执行。就像这样:
go func() {
fmt.Println("Concurrent execution!")
}()
1.9. q 反射
1.10. q 语言交互性
在Go语言中直接调用了C标准库的puts函数。
package main/*
#include <stdio.h>
*/import "C"import "unsafe"func main() {cstr := C.CString("Hello, world")
C.puts(cstr)
C.free(unsafe.Pointer(cstr))}
q
1.11. 函数多返回值
> func getName()(firstName, middleName, lastName, nickName string){ > return "May", "M", "Chen", "Babe" } //定义了一个多返回值的函数getName > > fn, mn, ln, nn := getName() //调用赋值 > _, _, lastName, _ := getName() //缺省调用
2. 参考
Go并发编程之Go语言概述.mht