美文网首页
GO 面试题

GO 面试题

作者: parker7 | 来源:发表于2018-10-30 09:39 被阅读0次

1.以下代码有什么问题,说明原因

type student struct {
    Name string
    Age  int
}

func pase_student() {
    m := make(map[string]*student)
    stus := []student{
        {Name: "zhou", Age: 24},
        {Name: "li", Age: 23},
        {Name: "wang", Age: 22},
    }
    for _, stu := range stus {
        m[stu.Name] = &stu
    }
}

答:
阐述问题:会存在问题,最终m存储的值都会相同,即
m["zhou"] = &{Name: "zhou", Age: 24}
m["li"] = &{Name: "zhou", Age: 24}
m["wang"] = &{Name: "zhou", Age: 24}

分析问题:
for range代码被翻译成下面代码

for_temp := range
len_temp := len(for_temp)
for index_temp = 0; index_temp < len_temp; index_temp++ {
    value_temp = for_temp[index_temp]
    index = index_temp
    value = value_temp
    m[value.Name] = &value
}

则每一次循环中,存储起来的value指针其实都是同一个。

解决问题:

for _, stu := range stus {
    temp := stu
    m[stu.Name] = &temp
}

Go Range内幕

相关文章

  • golang 面试题

    Go面试题答案与解析

  • 彻底理解Golang Slice

    看完这篇文章,下面这些高频面试题你都会答了吧 Go slice的底层实现原理 Go array和slice的区别 ...

  • go 从0开始学习笔记【1】

    go面试题学习笔记[https://mp.weixin.qq.com/mp/homepage?__biz=MzAx...

  • Go语言的常量与变量使用注意事项

    一、变量 Go是静态类型,不能在运行期改变变量的类型。 面试题 这是一个关于Go语言全局变量声明和赋值的考察,Go...

  • Golang面试题41道

    Golang面试题41道 大家好,这一期呢,我们来说一下golang的面试题。 第1题什么是golang? go是...

  • GO 面试题

    1.以下代码有什么问题,说明原因 答:阐述问题:会存在问题,最终m存储的值都会相同,即m["zhou"] = &{...

  • Go 面试题

    能力模式 选择题 【初级】下面属于关键字的是()A. funcB. defC. structD. class 参考...

  • Go面试题

    1、简述 Go 语言GC(垃圾回收)的工作原理 Go1.3采用标记清除法, Go1.5采用三色标记法,Go1.8采...

  • golang面试

    答案会在后续更新 cch关于知乎go面试题的部分答案:https://xargin.com/answers-for...

  • 一道多线程面试题分析(控制输出顺序)

    这是一道15年的面试题,我在博客园看到,作者用C实现了其功能,我最近不是在学go呢么,所以就用go实现了,程序实现...

网友评论

      本文标题:GO 面试题

      本文链接:https://www.haomeiwen.com/subject/iilitqtx.html