Go语言chan发送接收数据

Go语言chan发送接收数据教程

Go 语言 中的 changoroutine 之间的通信机制,因此 chan 可以用来发送和接收数据。

chan发送数据

语法

msg_chan <- "msg"

参数

参数 描述
msg_chan 管道变量。
msg 要发送的数据。

说明

chan 发送数据的语法格式为 chan 变量 <- 加上要发送的数据,因此,我们这里是使用 chan 类型的 变量 msg_chan 发送一个 字符串 类型的数据。

chan接收数据

语法

msg := <- msg_chan

参数

参数 描述
msg_chan 管道变量。
msg 要接受的数据存放的变量。

说明

chan 接收数据的语法格式为 待接收的变量 <- chan 变量,因此,我们这里是使用的变量 msg 来接受 chan 类型的变量 msg_chan 的数据。

chan接收数据

语法

msg, ok := <- msg_chan

参数

参数 描述
msg_chan 管道变量。
msg 要接受的数据存放的变量。
ok 管道是否已经关闭。

说明

msg 为管道接受的数据,ok 表示管道是否 关闭 或者是否为空。

案例

Go语言chan发送字符串数据

使用 Go 语言的 chan 发送一个字符串类型的数据

package main import ( "fmt" "time" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") // 使用 Go 语言的 chan 发送一个字符串类型的数据 chanStr := make(chan string) go func() { chanStr <- "Hello HaiCoder Golang" time.Sleep(time.Duration(1) * time.Second) }() //接受数据 msg := <- chanStr fmt.Println("chan Msg =", msg) }

程序运行后,控制台输出如下:

17_golang channel发送接收数据.png

首先,我们定义了一个 chan string 类型 的管道变量 chanStr,接着,我们使用 go 创建了一个协程,在协程里面使用管道发送一个字符串,发送完毕之后,使用 sleep 函数睡眠一秒钟。

最后,我们使用变量 msg 来接受管道变量 chanStr 所发送的数据,并使用 print 打印最终的结果,我们发现输出了我们之前发送的字符串。

Go语言chan发送结构体数据

使用 Go 语言的 chan 发送一个 结构体 类型的数据

package main import ( "fmt" "time" ) type Person struct { Name string Age int } func main() { fmt.Println("嗨客网(www.haicoder.net)") person := Person{ Name:"HaiCoder", Age:18, } // 使用 Go 语言的 chan 发送一个结构体类型的数据 chanStruct := make(chan Person) go func() { chanStruct <- person time.Sleep(time.Duration(1) * time.Second) }() //接受数据 msg := <- chanStruct fmt.Println("chan Msg =", msg) }

程序运行后,控制台输出如下:

18_golang channel发送接收数据.png

首先,我们定义了一个 Person 结构体,接着,我们定义了一个 Person 结构体类型的变量 person,同时,使用make 创建了一个 chan Person 类型的管道变量 chanStruct。

接着,我们使用 go 创建了一个协程,在协程里面使用管道发送一个结构体,发送完毕之后,使用 sleep 函数睡眠一秒钟。

最后,我们使用变量 msg 来接受管道变量 chanStruct 所发送的数据,并使用 print 打印最终的结果,我们发现输出了我们之前发送的结构体。

Go语言chan发送接收数据总结

Go 语言 chan 发送数据语法:

msg_chan <- "msg"

Go 语言 chan 接收数据语法:

msg := <- msg_chan