"这篇资源包含了Go语言面试中的一些常见问题,包括了`defer`语句的执行顺序、数组和切片的操作以及结构体数组的遍历与修改。"
在Go语言中,`defer`关键字用于延迟函数的执行,通常会在函数返回前按后进先出(LIFO)的顺序执行。在第一段代码中,有三个`defer`函数,它们会在`panic`之后按照定义的顺序打印"A"、"B"和"C"。由于有两个`panic`,但只有一个会被执行,所以输出结果是:"DCBA"。
第二段代码展示了切片`append`操作。`i`是一个包含四个元素的整数切片,然后通过`append(i[:], i)`将`i`的副本添加到自身,接着再分别添加5和6。最终,`i`将包含12个元素:`[1234123456]`。
第三段代码涉及到数组、切片的引用和修改。首先,创建了一个长度为10的数组`arr`,然后创建了它的前5个元素的切片`top5`,接着又创建了`top5`的前3个元素的切片`top3`。修改`top5`的元素会影响到`arr`,因为它们共享相同的底层数组。`top3`通过`append`增加一个元素999,此时`top3`和`top5`都包含这个新值,但不会影响到原始数组`arr`。最后,`top3`的打印结果是`[1002300999]`,`top5`是`[10023009995]`,而`arr`保持不变,为`[1002300999567890]`。
第四段代码展示了如何遍历和修改结构体数组。`students`是一个包含两个`Student`结构体的数组。第一个`for range`循环遍历`students`并增加每个学生10岁。但由于在Go中,结构体数组的遍历是值拷贝,因此在循环中对`stu.Age`的修改不会影响到原数组`students`。第二个`for range`循环只是遍历并打印学生的名字,没有进行修改操作。
总结来说,这段面试题集涵盖了Go语言的关键特性,包括`defer`的执行机制、切片的扩展与修改、数组与切片的引用关系,以及结构体数组的遍历与修改。这些都是Go语言面试中常见的知识点,对于理解Go语言的内存管理和数据结构的操作非常重要。