博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go学习随笔 之 特殊语句 defer延迟语句 和 标签使用 及 goto
阅读量:3905 次
发布时间:2019-05-23

本文共 1315 字,大约阅读时间需要 4 分钟。

延迟语句defer

defer语句有两个特点

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

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

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

 

func main() {	defer fmt.Println("world!")	fmt.Println("hello ")}结果:hello world!
var i = 0func main() {	for ; i < 5; i++ {		defer print()		println("x", i)	}}func print() {	fmt.Println(i)}结果:x 0x 1x 2x 3x 455555

标签

 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: 0i is: 0, and j is: 1i is: 0, and j is: 2i is: 0, and j is: 3i is: 1, and j is: 0i is: 1, and j is: 1i is: 1, and j is: 2i is: 1, and j is: 3i is: 2, and j is: 0i is: 2, and j is: 1i is: 2, and j is: 2i is: 2, and j is: 3i is: 3, and j is: 0i is: 3, and j is: 1i is: 3, and j is: 2i is: 3, and j is: 3i is: 4, and j is: 0i is: 4, and j is: 1i is: 4, and j is: 2i is: 4, and j is: 3i is: 5, and j is: 0i is: 5, and j is: 1i is: 5, and j is: 2i is: 5, and j is: 3

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

转载地址:http://zvqen.baihongyu.com/

你可能感兴趣的文章
oracle10g rac 报ora-12545错误的解决方案 转载
查看>>
Linux配置Xmanager
查看>>
IP地址正则表达式
查看>>
对SOAP消息头的处理
查看>>
webservice TCP Monitor
查看>>
Oracle中sysdate的时区偏差
查看>>
【每日一算】旋转有序数组
查看>>
【每日一算】两数之和
查看>>
深入理解Mysql索引底层数据结构与算法
查看>>
B+树算法在mysql中能存多少行数据?
查看>>
【vue学习】—条件判断、循环遍历
查看>>
【vue学习】—slot插槽的使用
查看>>
怎样做研究
查看>>
labview 局部变量问题
查看>>
labview 循环外部与数组相连时问题
查看>>
哈佛大学凌晨4点半的景象--哈佛图书馆的二十条训言
查看>>
Outlook2010到处通讯录
查看>>
Gmail导入通讯录
查看>>
小米笔记本安装Win 10历程
查看>>
【转】SLAM 论文阅读和分类整理
查看>>