为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中打印频道的内容

在 Go 中打印频道的内容

Go
慕田峪9158850 2023-05-08 15:52:22
如何在 Go 中打印频道的内容?例如:package mainimport "fmt"func main() {    ok := make(chan int)    ok <- 1    x := <- ok    fmt.Println(x)}据我了解,ok是一个可以存储整数值的通道。那么,我怎样才能打印它的内容呢?fmt.Println(ok)不打印存储在通道内的值。谢谢。
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

通道的make(chan int)隐式大小为零(

大小为零的通道是无缓冲的。指定大小的通道 make(chan int, n) 被缓冲。

在这里,通道<-okok <-将被阻塞,直到有人处理它(并发)。所以,ok := make(chan int)改为ok := make(chan int,1)

package main


import "fmt"


func main() {

    ok := make(chan int, 1)

    ok <- 1

    x := <- ok

    fmt.Println(x)

}

或者同时处理它


package main


import "fmt"


func main() {

    ok := make(chan int)

    go func(){

       ok <- 1

    }()

    x := <- ok

    fmt.Println(x)

}


查看完整回答
反对 回复 2023-05-08
?
森林海

TA贡献2011条经验 获得超2个赞

在这里你试图写入一个无缓冲的通道,因为没有 go routines 试图从通道读取它会达到死锁情况


这是你可以做的


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)

}



查看完整回答
反对 回复 2023-05-08
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

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

> main.main() ./main.go:20 (PC: 0x4b68dc)

    15: func main() {

    16: 

    17:     c := make(chan int,10)

    18:     a:=1

    19:     c<-a

=>  20:     fmt.Println(<-c)

    21: 

    22: 

    23: }

(dlv) p c

chan int {

    qcount: 1,

    dataqsiz: 10,

    buf: *[10]int [1,0,0,0,0,0,0,0,0,0],

    elemsize: 8,

    closed: 0,

    elemtype: *runtime._type {size: 8, ptrdata: 0, hash: 4149441018, tflag: tflagUncommon|tflagExtraStar|tflagNamed|tflagRegularMemory (15), align: 8, fieldAlign: 8, kind: 2, equal: runtime.memequal64, gcdata: *0, str: 847, ptrToThis: 26368},

    sendx: 1,

    recvx: 0,

    recvq: waitq<int> {

        first: *sudog<int> nil,

        last: *sudog<int> nil,},

    sendq: waitq<int> {

        first: *sudog<int> nil,

        last: *sudog<int> nil,},

    lock: runtime.mutex {

        lockRankStruct: runtime.lockRankStruct {},

        key: 0,},}

(dlv) 


查看完整回答
反对 回复 2023-05-08
  • 3 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信