您的位置:首页 > 编程语言 > Go语言

Go语言3-程序控制

2015-06-03 22:53 405 查看
人们将程序定义为数据结构+算法,而算法的实现通常都是靠程序控制来完成,因此,程序控制对于程序来说,是非常重要的部分。接下来我们来通过本文来了解下Go为我们提供的程序控制。

1、条件语句

[code] 关键字:if、else、else if


[code]     if i := 0; x == i {  //注释1
          return 0
     } else if x == 1 {  //注释2
          return 1
     } else {
          return -1
     }


[code]     注释1:这里可以自定义局部变量,作用域为这个if-else体结束。
     注释2:if块不定义局部变量时与这种写法类似,如果这里也定义局部变量,则注释1处的
           if语句块无法引用到这里定义的变量,else语句块可以引用。


[code] 切记:不需要()来包围条件语句,{}为必须的,且必须与关键字同行


2、选择语句

[code] 关键字:switch、case、fallthrough


[code]     switch i {                 //注释1
     case 0:                    //注释2
          fmt.Printf("0")
     case 1:                    //注释3
          fallthrough
     case 2, 3:                 //注释4
          fmt.Printf("2,3,4")
     default:                   //注释5
          fmt.Printf("Default")
     }


[code]     注释1:{须与switch同行,这里可以有一个初始化表达式,右侧需要跟分号
     注释2:不需要明确的break来退出,默认自动退出
     注释3:当i=1时输出2,3,fallthrough关键字会继续执行紧跟的下一个case代码
     注释4:可以一个case中写多个满足条件(i为2,3中的一个即可)
     注释5:以上的都不匹配时执行


[code] switch后面的表达式不是必需的,这种结构与多个if...else if的逻辑作用等同


[code]     switch {                   //注释1
     case 0 == i:
          fmt.Printf("0")
     case 1 == i:
          fallthrough
     case 2 == i || 3 == i:
          fmt.Printf("2,3,4")
     default:
          fmt.Printf("Default")
     }


[code]     注释1:{这里可以有一个初始化表达式,右侧需要跟分号,如本行可写为switch i := 0; {


3、循环语句

[code] 关键字:for、range、break、continue
 1)for语句的多种格式
 格式1:


[code]     sum := 0
     for i := 0; i < 10; i++ { //注释1
          sum += i
     }


[code]     注释1:不需要()来包围条件语句,{}为必须有的,且{必须与关键字同行


[code] 格式2:


[code]     i, sum := 0, 0
     for {                    //注释1
          if i == 10 {
               break
          }
          sum += i
          i++
     }


[code]     注释1:类似于Java中的while(true)写法


[code] 格式3:


[code]     i, sum := 0, 0
     for i < 10 {
          sum += i
          i++
     }


[code] 2)数组或切片(后面讲解)的两种遍历方式
 写法1:


[code]     mySlice := []int{1, 2, 3, 4}              //注释1
     sum := 0                                  
     for i, l := 0, len(mySlice); i < l; i++ { //注释2
          sum += mySlice[i]
     }


[code]     注释1:定义一个slice
     注释2:赋值语句支持多重赋值(仅支持平行多重赋值)


[code] 写法2:


[code]     for i, v := range mySlice {               //注释1
          sum += v                             //注释2
          //sum +=mySlice[i]
     }


[code]    注释1:range有两个返回值,i为索引,v为值。当对map(后面讲解)进行遍历时,range的返回值分别为key,value
    注释2:这里要注意i没有使用,编译错误,请使用_代替


4、跳转语句

[code] 关键字:goto,其实break及continue也有跳转的功能
 三个语法都可以配合标签使用,标签区分大小写
 goto     标签名:调整程序执行位置,标签可以在语句之后定义
 break    标签名:结束与标签同级的for循环,标签必须在语句之前定义
 continue 标签名:结束与标签同级的for循环,标签必须在语句之前定义


[code]     Label1:                             //定义名为"Label1"的标签
          for {                          //无限循环
               for i := 0; i < 10; i++ {  
                    if i > 3 {
                         break Label1    //直接结束Label1同级的for
                    }
               }
          }


[code] goto、continue的使用大体类似


一路过来,我们发现其实Go是一门非常简单的语言,有其它编程语言基础同学看完这几篇博文触类旁通的就懂了,仅仅写法上的差异,别急,后面的文章将会介绍些Go比较独有的特性。

无闻(unknow)《Go编程基础》

许式伟的 《Go语言编程》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: