常见错误每日一练01

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)
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值