Go语言chan教程
chan 是 中的一个核心 ,可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯。
chan 的本质是一个队列,且 chan 是线程安全的, 也就是自带 的功能。
Go语言chan详解
chan 是 之间的通信机制,一个 chan 可以让一个 goroutine 通过它给另一个 goroutine 发送信息。每个 chan 都对应一个特殊的数据类型。
Go 语言提倡使用通信的方法代替共享内存,当一个资源需要在 goroutine 之间共享时,通道在 goroutine 之间架起了一个管道,并提供了确保同步交换数据的机制。
声明通道时,需要指定将要被共享的数据的类型。可以通过通道共享内置类型、命名类型、 和引用类型的值或者 。
声明chan
语法
var chanName chan chanType
参数
参数 | 描述 |
---|---|
var | 声明变量使用的关键字。 |
chanName | 管道变量名。 |
chan | 声明管道变量类型使用的关键字。 |
chanType | 管道变量的具体类型。 |
说明
我们声明了一个 chan 类型的 ,变量名为 chanName,变量的类型为 chan chanType。注意 chanName 的变量类型为 chan chanType。
此时,chanName 的值为 nil,声明之后需要使用 make 创建完毕之后,才可以使用。
创建通道
通道是引用类型,需要使用 make 进行创建,格式如下:
chanName := make(chan chanType)
使用 make 创建一个类型为 chan chanType 的管道 chanName。
案例
创建管道
使用 make 创建管道
package main import ( "fmt" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") // 使用 make 创建一个 chan int 类型的管道 var chanInt chan int fmt.Println("chanInt =", chanInt) chanInt = make(chan int) fmt.Println("chanInt =", chanInt) }
程序运行后,控制台输出如下:
chan int
接着,我们使用 make 创建该管道,创建完之后,再次打印该管道,此时管道已经不是 nil,因此,我们在使用管道之前一定要先 make,后使用。
创建管道
使用 make 创建管道
package main import ( "fmt" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") // 使用 make 创建 chan string 类型的管道 chanStr := make(chan string) // 使用 make 创建 chan *int 类型的管道 chanIntPtr := make(chan *int) // 使用 make 创建 chan []byte 类型的管道 chanByte := make(chan []byte) fmt.Println("chanStr =", chanStr) fmt.Println("chanIntPtr =", chanIntPtr) fmt.Println("chanByte =", chanByte) }
程序运行后,控制台输出如下:
我们分别使用 make 创建了 chan string、chan *int 和 chan []byte 类型的管道。
Go语言chan总结
chan 是 Go 语言中的一个核心类型,可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯。
chan 的本质是一个队列,且 chan 是线程安全的, 也就是自带锁的功能。