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

mac2025-05-27  29

点击上方蓝色“Golang来啦”关注我哟

加个“星标”,天天 15 分钟,一起学 Go

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》

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

看下今天的题目:

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}

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

ps:看完文章如果有收获,顺手花 1s 时间帮点下文末右下方的「在看」,感激!

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

推荐阅读:

最新回复(0)