原文地址:Go-每日面试题目~(四)
1、说说以下代码会输出什么内容?
func main() {
defer_call()
}
func defer_call() {
defer func() { fmt.Println("打印前") }()
defer func() { fmt.Println("打印中") }()
defer func() { fmt.Println("打印后") }()
panic("触发异常")
}
上述代码会先输出【打印前】,之后是【打印中】,再然后是【打印后】,最后则是panic内容【panic:触发异常】,原因也不复杂就是defer的执行顺序是后进先出,当出现panic语句时,会先按照defer的后进先出的顺序执行,最后才会执行panic。
2、以下代码将会输出什么?请简要说明原因。
func main() {
slice := []int{0,1,2,3}
m := make(map[int]*int)
for key,val := range slice {
m[key] = &val
}
for k,v := range m {
fmt.Println(k,"->",*v)
}
}
上述代码出现问题的原因是for range

本文介绍了两个Go语言相关的面试题目。第一题涉及defer的执行顺序,当panic发生时,会先按后进先出顺序执行defer,最后执行panic。第二题解释了代码因循环副本导致map所有值为最后元素的问题。文章强调了对Go语言特性理解的重要性。
&spm=1001.2101.3001.5002&articleId=122358655&d=1&t=3&u=9b9c50d9fb3d4f328a5f280529cf4ab1)

被折叠的 条评论
为什么被折叠?



