GO语言实战——第一章
GO语言特点介绍
-
Go 语言对传统的面向对象开发 进行了重新思考,并且提供了更高效的复用代码的手段。Go 语言还让用户能更高效地利用昂贵 服务器上的所有核心,而且它编译大型项目的速度也很快。
-
开发人员在为项目选 择语言时,不得不在快速开发和性能之间做出选择。C 和 C++这类语言提供了很快的执行速度, 而 Ruby 和 Python 这类语言则擅长快速开发。Go 语言在这两者间架起了桥梁,不仅提供了高性 能的语言,同时也让开发更快速。
-
Go语言特点:
- Go 语言的语法简洁到只有几个关键字,便于记忆。
- Go 语言内置并发机制,所以不用被迫使用特定的线程库。
- Go 语言的类型系统简单且高效,不需要为面向对象开发付出额外的心 智,让开发者能专注于代码复用。
- Go 语言还自带垃圾回收器。
+++
开发速度
- 编译 Go 程序时,编译器只会关注那些直接被引用的库,而不是像 Java、C 和 C++那样,要遍历 依赖链中所有依赖的库。因此,很多 Go 程序可以在 1 秒内编译完。
并发(goroutine)
-
Go 语言对并发的支持是这门语言最重要的特性之一。
-
goroutine 很像线程,但是它占用的 内存远少于线程,使用它需要的代码更少。通道(channel)是一种内置的数据结构,可以让 用户在不同的 goroutine 之间同步发送具有类型的消息。这让编程模型更倾向于在 goroutine 之间发送消息,而不是让多个 goroutine 争夺同一个数据的使用权。
-
goroutine
- 在其他编程语言中,你需要用线程来完成同样的事情,而在 Go 语言中会使用同一个线程 来执行多个 goroutine。
- 在 Go 语言中,net/http 库直接使用了 内置的 goroutine。每个接收到的请求都自动在其自己的 goroutine 里处理。goroutine 使用的内存 比线程更少,Go 语言运行时会自动在配置的一组逻辑处理器上调度执行 goroutine。
通道
-
通道是一种数据结构。
-
可以让 goroutine 之间进行安全的数据通信。通道可以帮用户避免其 他语言里常见的共享内存访问的问题。
-
通道这一模 式保证同一时刻只会有一个 goroutine 修改数据。通道用于在几个运行的 goroutine 之间发送数据。
-
需要强调的是,通道并不提供跨 goroutine 的数据访问保护机制。如果通过通道传输数据的 一份副本,那么每个 goroutine 都持有一份副本,各自对自己的副本做修改是安全的。当传输的 是指向数据的指针时,如果读和写是由不同的 goroutine 完成的,每个 goroutine 依旧需要额外的 同步动作。
+++
GO 语言的类型系统
- Go 语言不仅有类似 int 和 string 这样的内置类型,还支持用户定义的类型。
Go接口对一组行为建模
- 接口用于描述类型的行为。如果一个类型的实例实现了一个接口,意味着这个实例可以执行 6 第 1 章 关于 Go 语言的介绍 一组特定的行为。你甚至不需要去声明这个实例实现某个接口,只需要实现这组行为就好。
- 这和传统的面向对象编程语言的接口系统有本质的区别。Go 语言的接口更小,只倾向于 定义一个单一的动作。实际使用中,这更有利于使用组合来复用代码。用户几乎可以给所有包 含数据的类型实现 io.Reader 接口,然后把这个类型的实例传给任意一个知道如何读取 io.Reader 的 Go 函数。
内存管理
- 虽然 Go 语言的垃圾回收会有一些额外的开销,但是编程时, 能显著降低开发难度。Go 语言把无趣的内存管理交给专业的编译器去做,而让程序员专注于更 有趣的事情。
小结
- Go语言是现代的、快速的,带有一个强大的标准库。
- Go语言内置对并发的支持。
- Go语言使用接口作为代码复用的基础模块。

浙公网安备 33010602011771号