Go 语言 中的 chan 是 goroutine 之间的通信机制,因此 chan 可以用来发送和接收数据。
msg_chan <- "msg"
参数 | 描述 |
---|---|
msg_chan | 管道变量。 |
msg | 要发送的数据。 |
chan 发送数据的语法格式为 chan 变量 <- 加上要发送的数据,因此,我们这里是使用 chan 类型的 变量 msg_chan 发送一个 字符串 类型的数据。
msg := <- msg_chan
参数 | 描述 |
---|---|
msg_chan | 管道变量。 |
msg | 要接受的数据存放的变量。 |
chan 接收数据的语法格式为 待接收的变量 <- chan 变量,因此,我们这里是使用的变量 msg 来接受 chan 类型的变量 msg_chan 的数据。
msg, ok := <- msg_chan
参数 | 描述 |
---|---|
msg_chan | 管道变量。 |
msg | 要接受的数据存放的变量。 |
ok | 管道是否已经关闭。 |
msg 为管道接受的数据,ok 表示管道是否 关闭 或者是否为空。
使用 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)
}
程序运行后,控制台输出如下:
首先,我们定义了一个 chan string
类型 的管道变量 chanStr,接着,我们使用 go 创建了一个协程,在协程里面使用管道发送一个字符串,发送完毕之后,使用 sleep 函数睡眠一秒钟。
最后,我们使用变量 msg 来接受管道变量 chanStr 所发送的数据,并使用 print 打印最终的结果,我们发现输出了我们之前发送的字符串。
使用 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)
}
程序运行后,控制台输出如下:
首先,我们定义了一个 Person 结构体,接着,我们定义了一个 Person 结构体类型的变量 person,同时,使用make 创建了一个 chan Person
类型的管道变量 chanStruct。
接着,我们使用 go 创建了一个协程,在协程里面使用管道发送一个结构体,发送完毕之后,使用 sleep 函数睡眠一秒钟。
最后,我们使用变量 msg 来接受管道变量 chanStruct 所发送的数据,并使用 print 打印最终的结果,我们发现输出了我们之前发送的结构体。
Go 语言 chan 发送数据语法:
msg_chan <- "msg"
Go 语言 chan 接收数据语法:
msg := <- msg_chan