go语言学习笔记(第2章)—流程

来源:转载


GO语言在流程中,添加了fallthrough关键字。 1. 条件语句 条件语句不需要使用括号将条件包含起来 无论语句体内有几条语句,花括号{}都是必须存在的 左花括号 { 必须与 if 或者 else 处于同一行 在 if 之后,条件语句之前,可以添加变量初始化语句,使用 ; 间隔 在有返回值的函数中,不允许将"最终的"return语句包含在if...else...结构中,否则会编译失败。失败原因在于,GO函数无法找到终止该函数的return语句 这里好像有点问题,自己测试时候按照例子是不会报编译错误的。 经过测试,GO语言也可以将函数的返回值作为条件语句 2. 选择语句 结果如下: 有几点需要注意: 左花括号 { 必须与 switch 处于同一行 条件表达式不限制为常量或者整数 单个 case 中,可以出现多个结果选项 与C的规则相反,GO语言不需要用 break 来明确退出一个case 只有在case中明确添加 fallthrough 关键字,才会继续执行紧跟的下一个 case 可以不设定 switch 之后的条件表达式,在此种情况下,整个switch结构与多个if...else...的逻辑作用相同 switch之后没有条件表达式。如果传入的参数都没有符合case中的条件,就什么都不做 3. 循环语句 GO的循环语句只支持for循环,不支持while和do-while。 GO还进一步考虑到无限循环的场景,让开发者不用写无聊的for(;;){} 直接简化为如下写法: 有几点需要注意: 左花括号 { 必须与for处于同一行 允许在循环条件中定义和初始化变量,但GO不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量,不能使用i++, j++,需要使用i, j = i+1, j+1 也支持continue和break来控制循环,但提供了一个更高级的break,可以选择中断哪一个循环 4. 跳转语句 GO也支持goto关键字 函数 GO语言的函数基本组成为:关键字func, 函数名, 参数列表, 返回值, 函数体和返回语句 1. 函数定义 如果若干个相邻的参数类型的相同,可以在参数列表中省略前面变量的类型声明: func Add(a, b int ) (ret int, err error) { } 如果返回值列表中多个返回值的类型相同,也可以用同样的方式合并 如果函数只有一个返回值,也可以这么写: func Add(a, b int) int { } 2. 函数调用 函数调用非常方便,只要事先导入了该函数所在的包,就可以直接按照如下所示的方式调用函数 import "mymath" c := mymath.Add(1, 2) 在GO语言中,函数支持多重返回值。利用函数的多重返回值和错误处理机制,可以很容易的写出优雅美观的GO代码。 GO语言中函数名字的大小写不仅仅是风格,更直接体现了该函数的可见性。对于很多注意美感的程序员,这里的函数名的首字母大写可能会让他们感觉不太适应,如果你改成小写的话,会遇到莫名其妙的编译错误。因为规则: 小写字母开头的函数只在本包内可见,大写字母开头的函数才能被其他包使用。这个规则也适用于类型和变量的可见性。 3. 不定参数 最早我碰到的不定参数,就是C的printf函数。合适的使用不定参数,可以让代码简单易用,尤其是输入输出函数,比如日志函数等等。 1) 不定参数类型 不定参数是指函数传入的参数个数为不定数量。要做到这一点,首先要将函数定义为接受不定参数类型: func myfunc(args ...int){ for _, arg := range args{ fmt.println(arg) } } 上述代码表示函数myfunc()接受不定数量的参数,这些参数的类型都是int,以下都是可以使用的调用方式: myfunc(2, 3, 4) myfunc(1, 3, 7, 13) 形如 ...type格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数。它是一个语法糖,即这种语法对语言的功能并没有影响,但是更方便程序员使用。使用语法糖能够增加程序的可读性,从而减少程序出错的机会。 2) 不定参数的传递 3) 任意类型的不定参数 如果你希望传递的参数是任意类型,可以指定类型为interface() func Printf(format string, args ...interface{}) { } 4. 多返回值 GO语言的函数或者成员的方法可以有多个返回值,这个特性能够使我们写出比其他语言更优雅,更简洁的代码。GO语言并不需要强制命名返回值。 如果调用方调用了一个具有多返回值的方法,但是却并不关心其中的某个返回值,可以简单的用一个下划线 "_"来跳过这个返回值。比如: n, _ := f.Read(buf) 5. 匿名函数和闭包 匿名函数是指不需要定义函数名的一种函数实现方式。GO语言支持匿名函数。 在GO里面,函数可以像普通变量一样被传递或使用。 匿名函数由一个不带函数名的函数声明和函数体组成 匿名函数可以直接赋值给一个变量或者直接执行: 闭包略 6. 错误处理 错误处理是学习任何编程语言都需要考虑的一个重要话题。在早期语言中,错误处理不是语言规范的一部分,通常只作为一种编程范式的存在。GO语言在此功能上考虑的更为深远。漂亮的错误处理规范是GO语言最大的亮点之一。 1) error接口 GO语言引入了一个关于错误处理的标准模式,即error接口。 type error interface { Error() string } 对于大多数函数,如果要返回错误,大致上都可以定义为如下模式,将error作为多种返回值中的最后一个,但这并非是强制要求: 调用时的代码建议按如下方式处理错误情况: defer() 类似处理当发生异常时要关闭文件的处理方式。



分享给朋友:
您可能感兴趣的文章:
随机阅读: