400-700-1307

【GO+區塊鏈面試題】go執行的隨機性和閉包

2019-01-26 17:05
下面的代碼會輸出什么,并說明原因
 
1.func main() {
2.runtime.GOMAXPROCS(1)
3.wg := sync.WaitGroup{}
4.wg.Add(20)
5.for i := 0; i < 10; i++ {
6.go func() {
7.fmt.Println("A: ", i)
8.wg.Done()
9.}()
10.}
11.for i := 0; i < 10; i++ {
12.go func(i int) {
13.fmt.Println("B: ", i)
14.wg.Done()
15.}(i)
16.}
17.wg.Wait()
18.}
考點:go執行的隨機性和閉包
解答:
誰也不知道執行后打印的順序是什么樣的,所以只能說是隨機數字。 但是A:均為輸出10,B:從0~9輸出(順序不定)。 第一個go func中i是外部for的一個變量,地址不變化。遍歷完成后,最終i=10。 故go func執行時,i的值始終是10。
第二個go func中i是函數參數,與外部for中的i完全是兩個變量。 尾部(i)將發生值拷貝,go func內部指向值拷貝地址。

開班信息

當前校區

北京校區
  • 北京校區
  • 上海校區
  • 廣州校區
  • 沈陽校區
  • 杭州校區
  • 南京校區
  • 鄭州校區
  • 成都校區
  • 深圳校區
  • 西安校區
  • 蘇州校區
  • 深圳沙井
  • 深圳觀瀾
  • 深圳龍崗
  • 武漢校區
  • 西寧校區
  • 石家莊校區
  • 湖北咸寧
  • 廣東惠州
  • 廣東佛山

                    Copyright © 2007-2019 IT兄弟連教育 版權所有 京ICP備11018177號  京公網安備 11010802026987號

                    内蒙古十一选五预测号