Go的语言特性总结
写在前面: http://www.52php.cn/article/p-eguswgsa-uw.html按照书中说的,Go语言具有以下的特征,下面我们分别来进行介绍。 1. 自动垃圾回收从C到C++,从程序性能的角度来考虑,这两种语言允许程序员自己管理内存,包括内存的申请和释放等。因为没有垃圾回收机制所以C/C++运行起来速度很快,但是随着而来的是程序员对内存使用上的很谨小慎微的考虑。因为哪怕一点不小心就可能会导致“内存泄露”使得资源浪费或者“野指针”使得程序崩溃等,尽管C++11后来使用了智能指针的概念,但是程序员仍然需要很小心的使用。后来为了提高程序开发的速度以及程序的健壮性,java和C#等高级语言引入了GC机制,即程序员不需要再考虑内存的回收等,而是由语言特性提供垃圾回收器来回收内存。但是随之而来的可能是程序运行效率的降低。 2. 更丰富的内置类型其实作为一种新兴的语言,如果仅仅是为了某种特定的用途那么可能其内置类型不是很多,仅需要能够完成我的功能即可,但是Go语言“不仅支持几乎所有语言都支持的简单内置类型(比如整型和浮点型等)外,还支持一些其他的高级类型,比如字典类型,map要知道这些类型在其他语言中都是通过包的形式引入的外部数据类型。数组切片(Slice),类似于C++ STL中的vector,在Go也是一种内置的数据类型作为动态数组来使用。这里满有一个颇为简单的解释:”既然绝大多数开发者都需要用到这个类型,为什么还非要每个人都写一行import语句来包含一个库?” 3. 支持函数多返回值在C,C++中,包括其他的一些高级语言是不支持多个函数返回值的。但是这项功能又确实是需要的,所以在C语言中一般通过将返回值定义成一个结构体,或者通过函数的参数引用的形式进行返回。而在Go语言中,作为一种新型的语言,目标定位为强大的语言当然不能放弃对这一需求的满足,所以支持函数多返回值是必须的,例如: > func getName()(firstName,middleName,lastName,nickName string){
> return "May","M","Chen","Babe" } //定义了一个多返回值的函数getName
>
> fn,mn,ln,nn := getName() //调用赋值
> _,_,_ := getName() //缺省调用
4. 错误处理在传统的OOP编程中,为了捕获程序的健壮性需要捕获异常,使用的方法大都是try() catch{}模块,例如,在下面的java代码中,可能需要的操作是: Connection conn = ...;
try {
Statement stmt = ...;
...//别的一些异常捕获
finally {
stmt.close();
}
finally {
conn.close();
}
而在Go中引入了三个关键字,分别是 defer、panic和recover,其中使用defer关键字语句的含义是不管程序是否出现异常,均在函数退出时自动执行相关代码。 conn := ...
defer conn.Close()
另外两个关键词后面再讨论。所以“Go语言的错误处理机制可以大量减少代码量,让开发者也无需仅仅为了程序安全性而添加大量一层套一层的try-catch语句。这对于代码的阅读者和维护者来说也是一件很好的事情,因为可以避免在层层的代码嵌套中定位业务代码。” 5. 匿名函数和闭包关于这个功能介绍的不多,大概就是说Go中的函数也可以作为参数进行传递: 6. 类型和接口这个特性是Go在实现OPP时候的一些特性,主要有这么几点: // 抽象接口 7. 并发编程其实到目前为止,最吸引我的就是这个特性,而且我之前说了如果不是因为要做服务器的高并发我可能根本就不知道Go这种语言,在上一篇文章http://www.52php.cn/article/p-gevlfesf-uw.html 中讨论了为什么Go可以实现大规模的并发的原理,这里不做详细的介绍,只给出实现方法,即 8. 支持反射这里的反射(reflecttion)和JAVA中的反射类似,可以用来获取对象类型的相信信息,并动态操作对象。因为反射可能会对程序的可读性有很大的干扰,所以,在Go中只是在特别需要反射支持的地方才实现反射的一些功能。“反射最常见的使用场景是做对象的序列化(serialization,有时候也叫Marshal & Unmarshal)。例如,Go语言标准库的encoding/json、encoding/xml、encoding/gob、encoding/binary等包就大量依赖于反射功能来实现。” 9. 语言的交互性这里的交互性主要是和C的交互性,之所以这样是因为Go语言的开发者是最初贝尔实验室创建Unix系统以及C语言的一般人,包括: package main
/* #include <stdio.h> */
import "C"
import "unsafe"
func main() { cstr := C.CString("Hello,world") C.puts(cstr) C.free(unsafe.Pointer(cstr)) }
以上就是书中总结的Go语言的9大特性,这里面我看完之后根据自己的体会以及书中的一些总结进行了汇总。对于想了解Go这么语言,以及准备进入这个领域的人可以对Go有一个大概的认识。如果想深入的学习可以去看七牛云存储团队出的《Go语言编程》。我后面也会继续学习。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |