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

Go语言学习笔记 -- 控制结构

2017-02-20 22:28 633 查看
Go中只有少量几个控制结构

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语言 编程