GO 语言魅力
语言特性:
Go语言是一个静态类型语言,特性如下:
1.自动垃圾回收
2.丰富的内置类型
3 函数多返回值
4 错误处理
5 匿名函数和闭包
6 类型和接口
7.并发编程
8.反射
9,语言交互性
垃圾回收:即所有的内存分配动作都会被在运行时记录,同时任何对该内存的使用也都会被记录,然后垃圾回收器会对所有已经分配的内存进行跟踪监测,一旦发现
有些内存已经不再被任何人使用,就阶段性地回收这些没人用的内存。
如果使用Go语言实现,我们就完全不用考虑何时需要释放之前分配的内存的问题,系统会自动帮我们判断,并在合适的时候(比如CPU相对空闲的时候)进行自动垃圾收集工作。
丰富的的内置类型:字典 --map; 数组切片 --slice。数组切片是一种动态增长的数组。数组切片的功能和c++的vector类似。
函数多返回值:
func getName()(firstName, middleName, lastName, nickName string){
return “May”, “M”, “Chen”, “Babe”
}
错误处理:Go 引入了三个关键字用来标准的错误处理流程:defer、 panic、 recover。
匿名函数和闭包:
在Go语言中,所有的函数也是值类型,可以作为参数传递。 Go语言支持常规的匿名函数和闭包,比如下列代码就定义了一个名为f的匿名函数,开发者可以随意对该匿名函数变量进行传递和调用:
f := func(x, y int) int {
return x + y
}
类型和接口:
Go语言的类型定义非常接近于C语言中的结构(struct),甚至直接沿用了struct关键字。相比而言, Go语言并没有直接沿袭C++和Java的传统去设计一个超级复杂的类型系统,不支持继承和重载,而只是支持了最基本的类型组合功能。
并发编程:
通过在函数调用前使用关键字go,我们即可让该函数以goroutine方式执行。 goroutine是一种比线程更加轻盈、更省资源的协程。 Go语言通过系统的线程来多路派遣这些函数的执行,使得每个用go关键字执行的函数可以运行成为一个单位协程。当一个协程阻塞的时候,调度器就会自动把其他协程安排到另外的线程中去执行,从而实现了程序无等待并行化运行。而且调度的开销非常小,一颗CPU调度的规模不下于每秒百万次,这使得我们能够创建大量的goroutine,从而可以很轻松地编写高并发程序,达到我们想要的目的。
Go语言实现了CSP(通信顺序进程, Communicating Sequential Process)模型来作为goroutine间的推荐通信方式。在CSP模型中,一个并发系统由若干并行运行的顺序进程组成,每个进程不能对其他进程的变量赋值。进程之间只能通过一对通信原语实现协作。 Go语言用channel(通道)
这个概念来轻巧地实现了CSP模型。 channel的使用方式比较接近Unix系统中的管道(pipe)概念,可以方便地进行跨goroutine的通信。
反射:
通过反射,你可以获取对象类型的详细信息,并可动态操作对象。
反射最常见的使用场景是做对象的序列化(serialization,有时候也叫Marshal & Unmarshal)。例如, Go语言标准库的encoding/json、 encoding/xml、 encoding/gob、 encoding/binary等包就大量依赖于反射功能来实现。
这是我对Go的一些总结,希望,大家可以从这学到东西。