Go学习随笔 之 特殊语句 defer延迟语句 和 标签使用 及 goto

延迟语句defer

defer语句有两个特点

第一,只有当defer语句全部执行完成之后,defer函数才算真正的执行结束

第二,当函数中有defer语句时,需要等待所有的defer语句执行完毕,才会执行return语句

因为defer的特点,可以用于资源回收,清理收尾工作。使用defer后不用纠结代码放到哪里,反正都是最后执行。

 

func main() {
	defer fmt.Println("world!")
	fmt.Println("hello ")
}

结果:
hello 
world!
var i = 0

func main() {

	for ; i < 5; i++ {
		defer print()
		println("x", i)
	}

}

func print() {
	fmt.Println(i)
}

结果:
x 0
x 1
x 2
x 3
x 4
5
5
5
5
5

标签

 for、switch 或 select 语句都可以打上标签

标签格式如下:

LA1:
	fmt.Println("hello!")

 

	for i := 0; i < 5; i++ {
		if i == 3 {
			goto LA1
		}
		fmt.Println(i)
	}

LA1:
	fmt.Println("hello!")

注意:

尽量不要用goto

goto结构很乱的 

 

LA2:
	for i := 0; i <= 5; i++ {
		for j := 0; j <= 5; j++ {
			if j == 4 {
				continue LA2
			}
			fmt.Printf("i is: %d, and j is: %d\n", i, j)
		}
	}

结果:
i is: 0, and j is: 0
i is: 0, and j is: 1
i is: 0, and j is: 2
i is: 0, and j is: 3
i is: 1, and j is: 0
i is: 1, and j is: 1
i is: 1, and j is: 2
i is: 1, and j is: 3
i is: 2, and j is: 0
i is: 2, and j is: 1
i is: 2, and j is: 2
i is: 2, and j is: 3
i is: 3, and j is: 0
i is: 3, and j is: 1
i is: 3, and j is: 2
i is: 3, and j is: 3
i is: 4, and j is: 0
i is: 4, and j is: 1
i is: 4, and j is: 2
i is: 4, and j is: 3
i is: 5, and j is: 0
i is: 5, and j is: 1
i is: 5, and j is: 2
i is: 5, and j is: 3

当 j==4 和 j==5 的时候,没有任何输出:标签的作用对象为外部循环,因此 i 会直接变成下一个循环的值,而此时 j 的值就被重设为 0,即它的初始值。如果将 continue 改为 break,则不会只退出内层循环,而是直接退出外层循环了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值