行业知识
GO语言学习笔记(与Java的比较学习)(二)
控制结构
if-else:
关键��� if 和 else 之后的左大括号 { 必须和关键字在同一行,如果你使用了 else-if 结构,则前段代码块的右大括号 } 必须和 else-if 关键字在同一行。这两条规则都是被编译器强制规定的。
格式如下:
if condition1 { // do something } else if condition2 { // do something else } else { // catch-all or default} if 可以包含一个初始化语句(如:给一个变量赋值)。这种写法具有固定的格式(在初始化语句后方必须加上分号),例如:
val := 10if val > max { // do something} 你也可以这样写:
if val := 10; val > max { // do something} 使用简短方式 := 声明的变量的作用域只存在于 if 结构中(在 if 结构的大括号之间,如果使用 if-else 结构则在 else 代码块中变量也会存在)。如果变量在 if 结构之前就已经存在,那么在 if 结构中,该变量原来的值会被隐藏。(我的理解是相当于声明了一个作用域为条件判断结构的局部变量)
测试多返回值函数的错误
Go 语言的函数经常使用两个返回值来表示执行是否成功:返回某个值以及 true 表示成功;返回零值(或 nil)和 false 表示失败
当不使用 true 或 false 的时候,也可以使用一个 error 类型的变量来代替作为第二个返回值:成功执行的话,error 的值为 nil,否则就会包含相应的错误信息(Go 语言中的错误类型为 error: var err error)
如果我们想要在错误发生的同时终止程序的运行,我们可以使用 os 包的 Exit 函数:
if err != nil { fmt.Printf("Program stopping with error %v", err) os.Exit(1)} os包的Exit()会直接终止程序。如果在main包中,则使用return就可以终止程序。
switch
相比较 C 和 Java 等其它语言而言,Go 语言中的 switch 结构使用上更加灵活。Go 的 switch 语句类似于 C、C++、Java、JavaScript 和 PHP 中的,不过 Go 只运行选定的 case,而非之后所有的 case。 实际上,Go 自动提供了在这些语言中每个 case 后面所需的 break 语句。 除非以 fallthrough 语句结束,否则分支会自动终止。
它接受任意形式的表达式:
switch var1 { case val1: ... case val2: ... default: ...} -
当代码块只有一行时,可以直接放置在 case 语句之后。
-
您同样可以使用 return 语句来提前结束代码块的执行。当您在 switch 语句块中使用 return 语句,并且您的函数是有返回值的,您还需要在 switch 之后添加相应的 return 语句以确保函数始终会返回。
-
可选的 default 分支可以出现在任何顺序,但最好将它放在最后。它的作用类似与 if-else 语句中的 else,表示不符合任何已给出条件时,执行相关语句。
-
您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。
-
每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止。( Go 语言使用快速的查找算法来测试 switch 条件与 case 分支的匹配情况,直到算法匹配到某个 case 或者进入 default 条件为止。)
-
一旦成功地匹配到某个分支,在执行完相应代码后就会退出整个 switch 代码块,也就是说您不需要特别使用 break 语句来表示结束。
switch 语句的第二种形式是不提供任何被判断的值(实际上默认为判断是否为 true),然后在每个 case 分支中进行测试不同的条件。
switch { case condition1: ... case condition2: ... default: ...}switch 语句的第三种形式是包含一个初始化语句:
switch initialization { case val1: ... case val2: ... default: ...}例如:
switch result := calculate(); { case result 0: ... default: // 0}使用fallthrough可以继续指向下一个case,否则找到对应case就会退出:
package mainimport "fmt"func main() { k := 6 switch k { case 4: fmt.Println("was
上一篇:我的服务器密码怎么查询?
下一篇:监控须要服务器吗怎么设置?