首页 > 解决方案 > 尝试在 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()
}

标签: go

解决方案


for 循环不执行,因为packetsReceived>14从一开始就是假的。也许你的意思是for packetsRecieved <= 14

(对于 也是一样packetsSent)。

for EXPR { ... }EXPR当为真 时执行 for 循环的主体。


推荐阅读