使用通道将数据从一个 Goroutine 传递到另一个 Goroutine 的问题

问题描述 投票:0回答:1

我开发了以下内容:

package main
import "fmt"
import "time"

func add ( n int){
    
    ch :=make(chan int)
    sum :=0
    for i:= 0;i<n;i++{
        sum = sum+i
    }
    
    ch <- sum
    fmt.Println("Sum is",sum)
    
    
}

func display(ch1 chan int){
    
    fmt.Println("Sum is now",ch1)

}
func main() {

  ch2 :=make(chan int)
  go add(10)
  go display(ch2)
  fmt.Println("Hello World!")
  time.Sleep(time.Second)

}

我想将当前总和传递到函数显示。 但是,当我打印总和时,我在控制台中收到以下消息:

世界你好! 现在总和是 0xc000094060

请帮忙打印当前金额。

multithreading go concurrency channel goroutine
1个回答
0
投票

您不是打印通道中的值,而是打印通道! 尝试:

package main
import "fmt"
import "time"

func add (ch chan int, n int){

    sum :=0
    for i:= 0;i<n;i++{
        sum = sum+i
    }

    ch <- sum
    fmt.Println("Sum is",sum)


}

func display(ch chan int){
    fmt.Println("Sum is now", <-ch)
}

func main() {

    ch :=make(chan int)
    go add(ch, 10)
    go display(ch)
    fmt.Println("Hello World!")
    time.Sleep(time.Second)

}

另外,为什么要在 goroutine 中运行 display 呢? 如果你在 add 中做了一些复杂的事情并且花费的时间超过 1 秒,那么这个应用程序将停止并且不执行任何操作。也许看看等待组。

© www.soinside.com 2019 - 2024. All rights reserved.