Go学习(十八):并发编程-select和通道

1.什么是select?

select语句的机制有点像switch语句,不同的是,select会随机挑选一个可通信的case来执行,如果所有case都没有数据到达,则执行default,如果没有default语句,select就会阻塞,直到有case接收到数据。

Go学习(十七):并发编程-通道

1.什么是Channel?

channel即Go的通道,是协程之间的通信机制。一个channel是一条通信管道,它可以让一个协程通过它给另一个协程发送数据。每个channel都需要指定数据类型,即channel可发送数据的类型。Go语言主张通过数据传递来实现共享内存,而不是通过共享内存来实现数据传递。

Go学习(十五):异常处理

1.介绍

错误是指程序中出现不正常的情况,从而导致程序无法正常运行。Go语言中没有try...catch来捕获错误,而是通过defer+recover+panic模式来实现捕捉错误信息。

Go学习(十四):面向对象-接口(interface)

虽然Go语言没有继承和多态,但是Go语言可以通过匿名字段实现继承,通过接口实现多态。

1.介绍

1.1 概念

在Go语言中,接口是一组方法签名。接口指定了类型应该具有的方法,类型决定了如何实现这些方法。当某个类型为接口中的所有方法提供了具体的实现细节时,这个类型就被称为实现了该接口。接口定义了一组方法,如果某个对象实现了该接口的所有方法,则此对象就实现了该接口。

Go学习(十一):映射(map)

1.定义

map是一种集合,可以像遍历数组或切片那样去遍历它。因为map是由Hash表实现的,所以对map的读取顺序不固定。

1.1 注意事项

  • map是无序的,每次打印出来的map都会不一样,它不能通过index获取,而必须通过key获取。返回顺序未知,因此每次打印的顺序可能不一样。
  • map的长度是不固定的,和切片一样可以扩展。内置的len()函数同样适用于map,返回map拥有的键值对的数量。
  • 同一个map中key必须保证唯一。
  • key的数据类型必须是可参与比较运算的类型,也就是支持==或!=操作的类型。
  • 引用类型则不能作为key的数据类型。
  • map的value可以是任何数据类型。
  • map和切片一样,也是一种引用类型。
  • map是非并发安全的。

2. 声明语法

可以使用var关键字来定义map,也可以使用内建函数make()。

Go学习(十):切片(slice)

1.切片的概念

Go语言中数组的长度不可改变,但在很多应用场景中,在初始定义数组时,数组的长度并不可预知,这样的序列集合无法满足要求。Go中提供了另外一种内置类型切片(slice),弥补了数组的缺陷。从底层来看,切片引用了数组的对象。切片可以追加元素,在追加时可能使切片的容量增大。与数组相比,切片不需要设定长度,在[]中不用设定值,相对来说比较自由。