在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/GO/ 求教golang中 for循環(huán)的一個(gè)問(wèn)題?

求教golang中 for循環(huán)的一個(gè)問(wèn)題?

package main

import (
    "time"
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup

    mc := make(chan int)
    go func(mcc chan int, wgg sync.WaitGroup){
        wgg.Add(+1)
        defer wgg.Done()
        time.Sleep(10 * time.Second)
        mcc <- 5
    }(mc, wg)
    wg.Wait()

    for {
        fmt.Println("loop")
        time.Sleep(1000 * time.Millisecond)
        select{
        case data := <- mc:
            fmt.Println(data)
            break
        default:
            continue
        }
    }
}

初學(xué)go,看了語(yǔ)法實(shí)踐了一下,應(yīng)該是理解有誤。創(chuàng)建一個(gè)go協(xié)程,10秒后向管道中輸入一個(gè)數(shù)值,然后下面循環(huán),如果從管道中獲取到數(shù)據(jù)則break。但為何運(yùn)行后,到第10秒打印出數(shù)字5之后仍然每秒打印一次loop?

回答
編輯回答
清夢(mèng)

break只是break了select,你這里的for是一個(gè)死循環(huán)且沒(méi)有退出條件。

2018年9月16日 08:25
編輯回答
執(zhí)念

case的break 改為return
還有一些其他方式
https://golang.org/ref/spec#B...

A "break" statement terminates execution of the innermost "for", "switch", or "select" statement within the same function.

這是官方文檔,可以去看下
這些基礎(chǔ)的知識(shí)還是要打牢點(diǎn)

2017年8月26日 18:25
編輯回答
故人嘆
package main

import (
    "time"
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup

    mc := make(chan int)
    go func(mcc chan int, wgg sync.WaitGroup){
        wgg.Add(+1)
        defer wgg.Done()
        time.Sleep(10 * time.Second)
        mcc <- 5
    }(mc, wg)
    wg.Wait()
    loop:
        for {
            fmt.Println("loop")
            time.Sleep(1000 * time.Millisecond)
            select{
            case data := <- mc:
                fmt.Println(data)
                break loop
            default:
                continue
            }
        }
}

給for循環(huán)加上標(biāo)簽, break的時(shí)候 跳出到指定的標(biāo)簽之外

2017年10月24日 22:20