go 并发编程
Go 并发编程原语,Goroutines和Channels
1. GO 并发编程简介
上一篇我们讲解了 Go 语言中的接口,至此对于 Go 语言的类型系统我们基本上讲的差不都了。接下来我们将深入了解 Go 最为人推广的特性并发编程。对于那些完全独立的子问题,并发是简单的,但是真正复杂的是处理那些存在资源共享的多进程多线程并发问题。我们需要有效的通信机制来处理程序中的竞争条件,同时避免可能出现的死锁问题。
Go 并发编程原语,Goroutines和Channels
上一篇我们讲解了 Go 语言中的接口,至此对于 Go 语言的类型系统我们基本上讲的差不都了。接下来我们将深入了解 Go 最为人推广的特性并发编程。对于那些完全独立的子问题,并发是简单的,但是真正复杂的是处理那些存在资源共享的多进程多线程并发问题。我们需要有效的通信机制来处理程序中的竞争条件,同时避免可能出现的死锁问题。
Go 的泛型编程
接口是 Go 语言提供的泛型的核心概念。所谓泛型就是允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,目的是增加函数的通用性。当然我们没必要去纠结概念,最重要的是搞明白,Go 如何通过接口来提高程序的灵活性。
Go 的对象组合技术
方法是面向对象编程(OOP)中的概念。有关 OOP 的定义我也说不清楚。但是与概念相比,更重要的是OOP的两个关键点:封装和组合。我们的目的是看看 Go 语言如何通过结构体嵌入等技术实现这两个关键点。
函数,代码封装的基本单元
函数通常使用起来并不复杂,定义或声明函数后,直接使用即可。但是为了函数更加易用,编程语言会为函数添加很多特性。在 Python 和 Go 中,函数都是一等"公民",即函数可以用在任何变量可以使用的地方,并且具有类型。因此接下来我们按照下面的顺序来讲解 Go 函数的相关内容:
Go 的类型系统
接着上一篇,我们来继续讨论 Go 里面的复合数据类型,包括数组、slice、map和结构体。数组和结构体是聚合类型;它们的值由许多元素或成员字段的值组成。slice,map 分别与 Python 中的 array.Array,dict 相对应,它们是 Go 提供给我们容器数据类型。
Go 的类型系统
Go语言将数据类型分为四类:基础类型、复合类型、引用类型和接口类型。基础类型,包括:数字、字符串和布尔型。复合数据类型包括数组和结构体(通过组合简单类型,来表达更加复杂的数据结构)。引用类型包括指针、切片、字典、函数、通道,虽然数据种类很多,但它们都是对程序中一个变量或状态的间接引用。函数和通道并不属于我们通常所说的数据类型,我们放在后面相关章节来介绍。