你好哇,公号正在举行答题送书活动,详情请看《自律改变自我,部落第 ① 期答题送书!》,今天是活动第 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}
答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!
所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!
推荐阅读:
如果我的文章对你有所帮助,点赞、转发都是一种支持!