如何在Go中打印频道的内容?
例如:
package main
import "fmt"
func main() {
ok := make(chan int)
ok <- 1
x := <- ok
fmt.Println(x)
}
据我了解,ok
是一个可以存储整数值的通道。那么,如何打印其内容?
fmt.Println(ok)
不会打印存储在通道内部的值。
谢谢。
答案 0 :(得分:2)
频道make(chan int)
的隐式大小为零(参考:https://golang.org/ref/spec#Making_slices_maps_and_channels)
大小为零的通道未缓冲。指定大小的通道make(chan int,n)被缓冲。请参阅http://golang.org/ref/spec#Send_statements,以了解有关缓冲通道与无缓冲通道的讨论。 http://play.golang.org/p/VZAiN1V8-P的示例说明了差异。
在这里,频道<-ok
或ok <-
将被阻止,直到有人对其进行处理(同时)。因此,将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)
}
答案 1 :(得分:1)
这里您要写入一个无缓冲的通道,因为没有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)
}
您可能会找到发挥作用的链接here
答案 2 :(得分:1)
除了使用调试器之外,我没有想到任何其他方法。试试delve
const cors = require('cors');
app.use(cors());