Go语言学习笔记 -- 控制结构
2017-02-20 22:28
633 查看
Go中只有少量几个控制结构
if - else
Go的if-else看起来是这样的:
大括号是强制要加的,这样做的目的是使代码看起来更清晰。这也是一个好的编程习惯
if 和switch接受初始化语句,通常用来初始化一个局部变量
在Go库中,当一个if语句不会进入下一个语句流程- 当语句结束于continue,break,goto或return时 - 不必要的else会被省略
goto 语句,goto语句的标签名是大小写敏感的
for循环,3种形式
Go中不支持逗号表达式,++ 和 - 是语句和表达式,如果你想在循环中使用多个变量,应该使用平行赋值
break 和 continue
利用break可以提前终止循环
嵌套循环中,可以在break后面指定标签,决定跳出哪一层循环
利用continue让循环进入下一个迭代,略过剩下的代码。
range关键字可用于循环。用作迭代器。当被调用时,它从循环中返回一个键值对。
switch, Go中的switch非常强大。表达式不必式常量或整数,执行过程从上而下,直到找到匹配项,而如果switch没有表达式,它会匹配true,这产生一种可能,可以用switch编写 if - else if -else的表达式
它不会匹配失败后自动往下匹配,但是可以用fallthrough使其这样做,实际在go1.8中测试,加不加fallthrough都可以实现相同额功能
分支可以使用逗号分隔的列表
if - else
Go的if-else看起来是这样的:
if x > 0 { return y } else { return x }
大括号是强制要加的,这样做的目的是使代码看起来更清晰。这也是一个好的编程习惯
if 和switch接受初始化语句,通常用来初始化一个局部变量
//在Go中大括号与if必须在同一行 if err:=Chmod(0664); err != nil { fmt.Print(err) return err }
在Go库中,当一个if语句不会进入下一个语句流程- 当语句结束于continue,break,goto或return时 - 不必要的else会被省略
f,err := os.Open(name, os.RDONLY, 0) if err != nil { return err } doSomething(f)
goto 语句,goto语句的标签名是大小写敏感的
for循环,3种形式
for init;condition;post { } for condition { } for { //死循环 }
sum := 0 for i:=0; i<10; i++ { sum += i }
Go中不支持逗号表达式,++ 和 - 是语句和表达式,如果你想在循环中使用多个变量,应该使用平行赋值
for i,j = 0, len(a)-1; i < j; i,j = i+1,j-1 { a[i], a[j] = a[j], a[i] }
break 和 continue
利用break可以提前终止循环
for i:=0; i < 10;i ++ { if i==8 { break; } fmt.Println(i) }
嵌套循环中,可以在break后面指定标签,决定跳出哪一层循环
J: for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 3 { break J } fmt.Println(i * j) } }
利用continue让循环进入下一个迭代,略过剩下的代码。
for i := 0; i < 10; i++ { if i == 5 { continue } fmt.Println(i) }
range关键字可用于循环。用作迭代器。当被调用时,它从循环中返回一个键值对。
list := []string{"1", "2", "s", "haha"} for k, v := range list { fmt.Printf("%v = %s\n", k, v) } for pos, char := range "ab中" { fmt.Printf("%d = %c\n", pos, char) }
switch, Go中的switch非常强大。表达式不必式常量或整数,执行过程从上而下,直到找到匹配项,而如果switch没有表达式,它会匹配true,这产生一种可能,可以用switch编写 if - else if -else的表达式
i := 11 switch { case i < 10: fmt.Println("less than 10") break case i == 10: fmt.Println("eq 10") break case i > 10: fmt.Println("more than 10") break }
它不会匹配失败后自动往下匹配,但是可以用fallthrough使其这样做,实际在go1.8中测试,加不加fallthrough都可以实现相同额功能
i := 10 switch i { case 11: fallthrough case 10: fmt.Println("Balabala") case 12: fmt.Println("more than 10") }
分支可以使用逗号分隔的列表
func shouldEscape(c byte) bool { switch c { case ' ', '?', '&', '=', '#', '+': return true } return false } //比较两个字符数组的大小 func compare(a, b []byte) int { for i := 0; i < len(a) && i < len(b); i++ { switch { case a[i] > b[i]: return 1 case a[i] < b[i]: return -1 } } switch { case len(a) > len(b): return 1 case len(b) > len(a): return -1 } return 0 }
相关文章推荐
- Go语言学习笔记(三) [控制结构、内建函数]
- Perl语言学习笔记 10 其他控制结构
- Go语言学习笔记3——控制语句
- Go语言学习笔记 --- 控制语句之if判断,循环语句for, switch语句和跳转语句
- go语言学习笔记(8) 流程控制
- Go语言学习笔记 --- 关键字、注释、结构、包相关和可见性规则
- [java学习笔记]java语言基础概述之运算符&程序流程控制&for循环嵌套
- Go 结构 学习笔记
- Go语言学习笔记 --- map
- Go语言学习笔记1/2
- Java之学习笔记(8)-------------运算符和循环结构(流程控制)
- php学习笔记(三)——操作符与控制结构
- php学习笔记(三)操作符与控制结构
- Perl 学习笔记-高级控制结构
- shell学习笔记之控制结构(三)
- Go学习笔记 (二) : 流程控制(if,for,switch) 与 函数 与 struct (匿名字段)
- GO: 语言并发与学习笔记
- Go语言学习笔记(七)杀手锏 Goroutine + Channel
- Scala学习笔记-控制结构和函数(2)
- 学习Go语言,关于流程控制