1、defer和panic的使用
package main
import "fmt"
func main() {
//该题主要是考defer和panic
//defer是函数执行完成之后,panic执行之前打印,故而打印顺序
//打印后
//打印中
//打印前
//panic: 出发异常
defer_call()
}
func defer_call() {
defer func () {
fmt.Println("打印前")
}()
defer func () {
fmt.Println("打印中")
}()
defer func () {
fmt.Println("打印后")
}()
panic("出发异常")
}
2、for range循环要点
package main
import "fmt"
func main() {
//这个主要考的是指针引用
//for range 循环的时候会创建每个元素的副本
//所以 m[key] = &val 取的都是变量 val 的地址,所以最后 map 中的所有元素的值都是变量 val 的地址,因为最后 val 被赋值为3,所有输出都是3.
wrong()
fmt.Println("---------------------------------")
right()
}
func wrong() {
slice := []int{0,1,2,3}
m := make(map[int]*int)
for k,v := range slice {
m[k] = &v
}
for k,v := range m {
fmt.Println(k,*v)
}
}
func right() {
slice := []int{0,1,2,3}
m := make(map[int]*int)
for k,v := range slice {
value := v
m[k] = &value
}
for k,v := range m {
fmt.Println(k,*v)
}
}