无名阁,只为技术而生。流水不争先,争的是滔滔不绝。

(go发送接收数据) golang中<-的含义 Go语言中的通道(Channels)基础和应用 全网首发(图文详解1)

前沿技术 Micheal 2周前 (05-10) 12次浏览 已收录 扫描二维码

(go发送接收数据) golang中<-的含义

在 Go 语言中, <- 符号在通道(Channels)的环境下,最常使用,它用于发送和接收数据。

实际上,在golang中存在两种操作:

  1. 发送数据: channel <- value
  2. 接收数据: 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)
}

在以上代码中:

  1. make(chan string) – 我们创建了一个新的 string 类型的通道。
  2. go func() { messages <- "Hello, Go语言编程之旅!" }() – 我们创建了一个新的 goroutine。在这个 goroutine 中,我们通过 messages <- "Hello, Go语言编程之旅!" 发送了一个新的 string 到通道。
  3. msg := <-messages – 我们从通道接收 string,并将其赋值给 msg
  4. 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)

喜欢 (0)
[]
分享 (0)
关于作者:
流水不争先,争的是滔滔不绝