来几道测试题(关于 range 和 goroutine 的)

149 阅读1分钟

测试题一

package main

import (
   "fmt"
   "time"
)

func main() {
   nums := []int{1, 2, 3}
   for _, i := range nums {
      func() {
         fmt.Println(i)
      }()
   }
}

问:程序输出的结果是多少?

测试题二

package main

import (
   "fmt"
   "time"
)

func main() {
   nums := []int{1, 2, 3}
   for _, i := range nums {
      go func() {
         fmt.Println(i)
      }()
   }
   time.Sleep(3 * time.Second)
}

问:程序输出的结果是多少?

测试题三

问:在测试题二的基础上,如果我想让程序的输出结果是下面六种中的一个,应该怎么改?最多有几种写法?

  • 1 2 3
  • 1 3 2
  • 2 1 3
  • 2 3 1
  • 3 1 2
  • 3 2 1

测试题四

问:我这样改,能不能达到测试题三的要求?

package main

import (
   "fmt"
   "time"
)

func main() {
   nums := []int{1, 2, 3}
   for _, i := range nums {
      go func(i *int) {
         fmt.Println(i)
      }(&i)
   }
   time.Sleep(3 * time.Second)
}