go - 尝试在 goroutine 中放置 for 循环
问题描述
我是尝试同步运行两个函数的初学者,我使用 waitGroup 等待其中一个函数。问题是 Go 似乎完全忽略了我的 for 循环并打印 packetReceived = 0
func introducePacket(firstVortex chan string) {
index := 1
packetsSended := 0
msg := strconv.Itoa(index) + " message"
for packetsSended > 14 {
select {
case firstVortex <- msg:
fmt.Println(msg)
packetsSended++
default:
time.Sleep(10 * time.Millisecond)
}
}
}
func receivePacket(wg *sync.WaitGroup, lastVortex chan string) {
packetsReceived := 0
fmt.Println("RECEIVE")
for packetsReceived > 14 {
select {
case msg := <-lastVortex:
fmt.Println(msg)
packetsReceived++
default:
time.Sleep(1 * time.Millisecond)
}
}
fmt.Println(packetsReceived)
defer wg.Done()
}
func main() {
var wg sync.WaitGroup
wg.Add(1)
vortexOne := make(chan string, 1)
vortexThree := make(chan string, 1)
go introducePacket(vortexOne)
go receivePacket(&wg, vortexThree)
wg.Wait()
}
解决方案
for 循环不执行,因为packetsReceived>14
从一开始就是假的。也许你的意思是for packetsRecieved <= 14
?
(对于 也是一样packetsSent
)。
for EXPR { ... }
EXPR
当为真 时执行 for 循环的主体。
推荐阅读
- python - 在 pyqtgraph 中的多个图上链接自动缩放
- java - Java Batch API:用于处理从 ItemReader.open() 抛出的异常的侦听器
- c - 在信号处理程序上调用 fprintf() 是否安全?
- android - androidlinkedIn集成-未收到访问令牌
- php - PHP - If else 语句麻烦
- plugins - 修改 Nativescript 应用中的现有插件
- python - Python正则表达式删除字符串中的url和域名
- php - PHP 7.2 中 mcrypt_encrypt 的完全替代品
- node.js - 删除nodejs中json键名中的特殊字符
- python - 如果其他逻辑无法正常工作,熊猫