闽公网安备 35020302035485号
ch := make(chan int) // 创建一个无缓冲的整数通道通道也可以是缓冲的,这意味着它可以存储一定数量的值,直到被接收。
ch := make(chan int, 10) // 创建一个缓冲的整数通道发送与接收:通道的基本操作
ch <- value // 向通道发送数据 receivedValue := <-ch // 从通道接收数据注意,发送和接收操作都会阻塞,直到对方准备好。这一特性使得程序能够同步执行。
func sendOnly(ch chan<- int, value int) {
ch <- value // 只发送数据
}
func receiveOnly(ch <-chan int) int {
return <-ch // 只接收数据
}
关闭通道:优雅结束通信close(ch) // 关闭通道接收者可以通过检查通道是否关闭来判断是否继续接收数据。
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个无缓冲的整数通道
ch := make(chan int)
// 启动一个 goroutine 发送数据到通道
go sendData(ch)
// 从通道接收数据并打印
receiveData(ch)
}
// sendData 向通道发送 0 到 4 的整数
func sendData(ch chan<- int) {
for i := 0; i < 5; i++ {
ch <- i
time.Sleep(time.Second) // 模拟处理时间
}
close(ch) // 发送完毕后关闭通道
}
// 堆代码 duidaima.com
// receiveData 从通道接收数据并打印
func receiveData(ch <-chan int) {
for {
value, ok := <-ch
if !ok {
fmt.Println("通道关闭,退出。")
return
}
fmt.Println("接收到:", value)
}
}
在这个示例中,我们创建了一个无缓冲的通道,启动了一个发送数据的 goroutine,并在主程序中接收并打印数据。这个过程演示了如何在 goroutine 之间使用通道进行通信,并在完成发送后正确关闭通道。4.警惕死锁,确保并发操作正确同步。