Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Go中打印频道内容_Go - Fatal编程技术网

在Go中打印频道内容

在Go中打印频道内容,go,Go,如何在Go中打印频道内容 例如: package main import "fmt" func main() { ok := make(chan int) ok <- 1 x := <- ok fmt.Println(x) } 据我所知,ok是一个可以存储整数值的通道。那么,我如何打印它的内容呢 fmt.Printlnok不打印存储在通道内的值 谢谢。通道makechan int具有隐式大小零参考: 大小为零的通道是无缓冲的。缓冲指定大小的通道m

如何在Go中打印频道内容

例如:

package main

import "fmt"

func main() {
    ok := make(chan int)
    ok <- 1
    x := <- ok
    fmt.Println(x)
}
据我所知,ok是一个可以存储整数值的通道。那么,我如何打印它的内容呢

fmt.Printlnok不打印存储在通道内的值

谢谢。

通道makechan int具有隐式大小零参考:

大小为零的通道是无缓冲的。缓冲指定大小的通道makechan int,n。有关缓冲通道与非缓冲通道的讨论,请参阅。上的示例说明了这一区别

此处,通道通道makechan int具有隐式大小0 ref:

大小为零的通道是无缓冲的。缓冲指定大小的通道makechan int,n。有关缓冲通道与非缓冲通道的讨论,请参阅。上的示例说明了这一区别


这里,channel这里您试图写入一个无缓冲的通道,因为没有go例程试图从该通道读取数据,这将导致死锁

这是你能做的

package main

import (
    "fmt"
    "time"
)

func main() {
    ok := make(chan int)

    go func() {
        for x := range ok {
            fmt.Println(x)
        }
    }()
    ok <- 1
    ok <- 3
    ok <- 2
    ok <- 5
    ok <- 3
    ok <- 9
    time.Sleep(1)
}

您可能会在此处找到play ground的链接,您正试图写入一个无缓冲通道,因为没有go例程试图从该通道读取数据,因此会出现死锁情况

这是你能做的

package main

import (
    "fmt"
    "time"
)

func main() {
    ok := make(chan int)

    go func() {
        for x := range ok {
            fmt.Println(x)
        }
    }()
    ok <- 1
    ok <- 3
    ok <- 2
    ok <- 5
    ok <- 3
    ok <- 9
    time.Sleep(1)
}

您可以找到play ground的链接

除了使用调试器,我没有想到任何其他方法。试一试

>main.main./main.go:20个PC:0x4b68dc 15:func main{ 16: 17:c:=makechan int,10 18:a:=1
19:C20:fmt.Println除了使用调试器,我没有想到任何其他方法。试试看

>main.main./main.go:20个PC:0x4b68dc 15:func main{ 16: 17:c:=makechan int,10 18:a:=1
19:c 20:fmt.Println无缓冲通道按设计不存储任何内容,因此ok不包含任何要打印的数据。还要注意的是,通道的打印内容不是真正的东西。您的fmt.Println从通道读取值并打印它。从通道读取值会将其从通道中删除。应为您提供可靠的基础关于通道如何工作的问题。没有什么简单的解决方案可以在通道中打印值而不将其排队。因此,如果您只想读取和打印,您可以读取和打印,然后写入另一个通道。我更新了问题。您能看一下吗?我在通道中存储了一个值。然后从通道中检索了值,现在我正在尝试打印它。@NeonFlash:您没有将值存储到通道中,因为通道无法存储值。但是,即使将其设置为缓冲区,也没有语言方法在不从通道接收的情况下读取存储的值。无缓冲区的通道没有设计存储任何内容,因此“确定”不包含任何要打印的数据。还请注意,print contPhantn从通道中读取一个值并打印出来。从通道中读取一个值将其从通道中移除。这应该为通道如何工作提供坚实的基础。没有一个简单的解决方案,可以在一个通道中打印值,而不需要对它们进行排队。因此,如果您想读取和打印您的信息。may read print and write to other channel我更新了问题。你能看一下吗?我在通道中存储了一个值。然后从通道中检索了值,现在我正在尝试打印它。@NeonFlash:你没有在通道中存储值,因为通道无法存储值。但是,即使你将其设置为缓冲,也没有l读取存储值而不从通道中接收的语言方法。
package main

import (
    "fmt"
    "time"
)

func main() {
    ok := make(chan int)

    go func() {
        for x := range ok {
            fmt.Println(x)
        }
    }()
    ok <- 1
    ok <- 3
    ok <- 2
    ok <- 5
    ok <- 3
    ok <- 9
    time.Sleep(1)
}