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