(go发送接收数据) golang中<-的含义
在 Go 语言中, <- 符号在通道(Channels)的环境下,最常使用,它用于发送和接收数据。
实际上,在golang中存在两种操作:
- 发送数据: channel <- value
- 接收数据: variable <- channel
下面让我们看以下基础例子:
package main
import (
"fmt"
"time"
)
func main() {
messages := make(chan string)
go func() {
messages <- "Hello, Go语言编程之旅!"
}()
msg := <-messages
fmt.Println(msg)
time.Sleep(time.Second * 1)
}
在以上代码中:
make(chan string)
– 我们创建了一个新的 string 类型的通道。go func() { messages <- "Hello, Go语言编程之旅!" }()
– 我们创建了一个新的 goroutine。在这个 goroutine 中,我们通过messages <- "Hello, Go语言编程之旅!"
发送了一个新的 string 到通道。msg := <-messages
– 我们从通道接收 string,并将其赋值给msg
。fmt.Println(msg)
– 我们打印从通道接收的 string。
至于使用场景,Go使用goroutine和channel实现并发,你可以观察以下使用实例,在这个例子中我们将通过2个goroutine交替打印数字和字母。
package main
import "fmt"
func print1(ch chan int, ch1 chan int) {
// 从channel ch接收数据, 并打印
for i := 0; i < 26; i++ {
fmt.Println("Goroutine 1: ", i)
ch <- 1
<- ch1
}
}
func print2(ch chan int, ch1 chan int) {
// 从channel ch接收数据, 并打印
for i := 0; i < 26; i++ {
<- ch
fmt.Println("Goroutine 2: ", i)
ch1 <- 2
}
}
func main() {
// 创建2个channel
ch1 := make(chan int)
ch2 := make(chan int)
// 并发执行2个function
go print1(ch1, ch2)
go print2(ch1, ch2)
// 阻塞主程序, 以便让上面的goroutine执行完
<- ch2
}
这是一个简单但直观的展示下如何在Go中使用通道的例子。希望我解答了您的问题! 如果还有其他关于Go的问题,可以随时给我留言哦!
Go语言文档解读:time.Sleep函数实现休眠 Go语言中的-Sleep-函数 全网首发(图文详解1)
idea trycatch快捷键是什么 -IntelliJ-IDEA-try-catch 全网首发(图文详解1)