建立一條 Goroutine 後,必須要延遲堵塞通道(沒有值傳入)才能讓程式有時間去執行 Goroutine 的涵式,否則一呼叫 Goroutine 涵式,結果程式就結束了。以下程式碼是最好的例子:

 

package main

import (
     "fmt"
)

func main(){
    go A() // 產生 Goroutine
    // 程式結束

}

func A() { // 本涵式根本沒機會(沒時間)執行到
    for {
        fmt.Println("B")
    }
}

以上執行結果:無                      

---------------------------------------------------

以下程式碼將呼叫 Goroutine 後,並且堵塞住,程式就有足夠時間執行 Goroutine 的涵式,如下:


package main

import (
     "fmt"
)

func main(){

    go A() // 產生 Goroutine

    i := make(chan int) // 宣告通道
    <- i // 堵塞通道 (沒有值傳入通道,所以堵塞,有值被傳入就會執行下一行程式碼,直到程式被結束為止)

}

func A() { // 本涵式被執行到了
    for {
        fmt.Println("B")
    }
}

以上執行結果:BBBBBBBBBBBBBB ...(無窮迴圈)        









    全站熱搜

    黃彥霖 發表在 痞客邦 留言(0) 人氣()