面试题库

【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号