点击上方蓝色“Golang来啦”关注我哟
加个“星标”,天天 15 分钟,一起学 Go
你好哇,欢迎来答题,一起来看下昨天题目的解析:
1.下面代码输出什么?请简要说明。
1type T struct {
2 V int
3}
4
5func (t *T) Incr(wg *sync.WaitGroup) {
6 t.V++
7 wg.Done()
8}
9func (t *T) Print() {
10 time.Sleep(1)
11 fmt.Print(t.V)
12}
13func main() {
14 var wg sync.WaitGroup
15 wg.Add(10)
16 var ts = make([]T, 10)
17 for i := 0; i < 10; i++ {
18 ts[i] = T{i}
19 }
20 for _, t := range ts {
21 go t.Incr(&wg)
22 }
23 wg.Wait()
24 for _, t := range ts {
25 go t.Print()
26 }
27 time.Sleep(5 * time.Second)
28}
A. 输出 12345678910;
B. 输出 0123456789;
C. 输出 9999999999;
D. panic;
参考答案及解析:C。这道题需要注意的一点是 for range 循环里的变量 t 是临时变量。
2.下面的代码可以随机输出大小写字母,尝试在 A 处添加一行代码使得字母先按大写再按小写的顺序输出。
1const N = 26
2
3func main() {
4 const GOMAXPROCS = 1
5 runtime.GOMAXPROCS(GOMAXPROCS)
6
7 var wg sync.WaitGroup
8 wg.Add(2 * N)
9 for i := 0; i < N; i++ {
10 go func(i int) {
11 defer wg.Done()
12 // A
13 runtime.Gosched()
14 fmt.Printf("%c", 'a'+i)
15 }(i)
16 go func(i int) {
17 defer wg.Done()
18 fmt.Printf("%c", 'A'+i)
19 }(i)
20 }
21 wg.Wait()
22}
参考答案及解析:
1const N = 26
2
3func main() {
4 const GOMAXPROCS = 1
5 runtime.GOMAXPROCS(GOMAXPROCS)
6
7 var wg sync.WaitGroup
8 wg.Add(2 * N)
9 for i := 0; i < N; i++ {
10 go func(i int) {
11 defer wg.Done()
12 runtime.Gosched()
13 fmt.Printf("%c", 'a'+i)
14 }(i)
15 go func(i int) {
16 defer wg.Done()
17 fmt.Printf("%c", 'A'+i)
18 }(i)
19 }
20 wg.Wait()
21}
解析若有不妥之处,欢迎在留言区交流、指正!
今天这两道题目特别有意思,值得细细研读,一起来看下:
1.下面两处打印的值是否相同?请简要说明。
1func main() {
2 var val int
3 println(&val)
4 f(10000)
5 println(&val)
6}
7
8func f(i int) {
9 if i--; i == 0 {
10 return
11 }
12 f(i)
13}
2.下面代码 A 处输出什么?请简要说明。
1func main() {
2 var val int
3
4 a := &val
5 println(a)
6
7 f(10000)
8
9 b := &val
10 println(b)
11
12 println(a == b) // A
13}
14
15func f(i int) {
16 if i--; i == 0 {
17 return
18 }
19 f(i)
20}
A. ture
B. false
答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!
ps:看完文章如果有收获,顺手花 1s 时间帮点下文末右下方的「在看」,感激!
所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!
推荐阅读:
如果我的文章对你有所帮助,点赞、转发都是一种支持!


给个[在看],是对四哥最大的支持

被折叠的 条评论
为什么被折叠?



