你好哇,公号正在举行答题送书活动,详情请看《自律改变自我,部落第 ① 期答题送书!》,今天是活动第 6 天,答题继续!

一起来看下昨天题目的解析:

1.下面的代码输出什么?

 1type N int
2
3func (n *N) test(){
4    fmt.Println(*n)
5}
6
7func main()  {
8    var n N = 10
9    p := &n
10
11    n++
12    f1 := n.test
13
14    n++
15    f2 := p.test
16
17    n++
18    fmt.Println(n)
19
20    f1()
21    f2()
22}

参考答案及解析:13 13 13。知识点:方法值。当目标方法的接收者是指针类型时,那么被复制的就是指针。

引自:《Go语言学习笔记》· 方法

2.下面哪一行代码会 panic,请说明原因?

 1package main
2
3func main() {
4  var m map[int]bool // nil
5  _ = m[123]
6  var p *[5]string // nil
7  for range p {
8    _ = len(p)
9  }
10  var s []int // nil
11  _ = s[:]
12  s, s[0] = []int{1, 2}, 9
13}

参考答案及解析:第 12 行。因为左侧的 s[0] 中的 s 为 nil。

引自:《Go语言101》

解析若有不妥之处,欢迎在留言区交流、指正!

看下今天的题目:
1.下面哪一行代码会 panic,请说明原因?

 1package main
2
3type T struct{}
4
5func (*T) foo() {
6}
7
8func (T) bar() {
9}
10
11type S struct {
12  *T
13}
14
15func main() {
16  s := S{}
17  _ = s.foo
18  s.foo()
19  _ = s.bar
20}

2.下面的代码有什么问题?

 1type data struct {
2    sync.Mutex
3}
4
5func (d data) test(s string)  {
6    d.Lock()
7    defer d.Unlock()
8
9    for i:=0;i<5 ;i++  {
10        fmt.Println(s,i)
11        time.Sleep(time.Second)
12    }
13}
14
15
16func main() {
17
18    var wg sync.WaitGroup
19    wg.Add(2)
20    var d data
21
22    go func() {
23        defer wg.Done()
24        d.test("read")
25    }()
26
27    go func() {
28        defer wg.Done()
29        d.test("write")
30    }()
31
32    wg.Wait()
33}

 

答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!

 

所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!

 

推荐阅读:

【独家】技术人到底应不应该写作?

好好学习

 

如果我的文章对你有所帮助,点赞、转发都是一种支持!

Go 面试每天一篇(第 60 天)_面试

Go 面试每天一篇(第 60 天)_面试_02

Go 面试每天一篇(第 60 天)_面试_03