首页 > 编程语言 > 详细

Go语言学习之流程控制(The way to go)

时间:2017-02-27 12:01:57      阅读:174      评论:0      收藏:0      [点我收藏+]

生命不止,继续Go go go.

今天介绍go中的流程控制,其中包括:
if else
switch
for
goto break continue
别等了,就这三个,没有了while

if…else…

条件表达式必须是布尔类型
之前提到过,下面的代码会报错:cannot use a (type int) as type bool in assignment

a := 1
if a {
    fmt.Println(a)
}

条件表达式可以省略圆括号

package main

import "fmt"

func main() {
    a := 3
    if (a > 2) {
        fmt.Println(a)
    }
}

或:

package main

import "fmt"

func main() {
    a := 3
    if a > 2 {
        fmt.Println(a)
    }
}

左侧的花括号不能另起一行
在go语言的世界中,在也不用因为if后的括号而争论左派还是右派了,下面代码错误:

package main

import "fmt"

func main() {
    a := 3
    if (a > 2) 
    {
        fmt.Println(a)
    }
}

错误:
a > 2 evaluated but not used
missing condition in if statement

else也不能另起一行

package main

import "fmt"

func main() {
    a := 3
    if (a > 2) {
        fmt.Println("a > 2")
    }
    else {
        fmt.Println("a <= 2")
    }
}

错误:syntax error: unexpected else, expecting }

if else一起使用

package main

import "fmt"

func main() {
    a := 3
    if a > 2 {
        fmt.Println("a > 2")
    } else if a < 2 {
        fmt.Println("a <=2")
    } else {
        fmt.Println("a == 2")
    }
}

在if语句中进行初始化

package main

import "fmt"

func main() {
    if a := 3; a > 2 {
        fmt.Println("a > 2")
    } else if a < 2 {
        fmt.Println("a <=2")
    } else {
        fmt.Println("a == 2")
    }
}

这里一定要注意有个分号,一定不能丢。

switch

不需要显示的写break

package main

import "fmt"

func main() {
    a, b, c, x := 1, 2, 3, 2
    switch x{
    case a, b:
        fmt.Println("a|b")
    case c:
        fmt.Println("c")
    default:
        fmt.Println("default")
    }
}

switch后的左侧花括号也不能另起一行
这里不再赘述,跟if的规则一样。

可以在switch后进行初始化

package main

import "fmt"

func main() {   
    switch a, b, c, x := 1, 2, 3, 2; x{
    case a, b:
        fmt.Println("a|b")
    case c:
        fmt.Println("c")
    default:
        fmt.Println("default")
    }
}

default可以不写在case的最后,但是建议写在case的最后
下面的代码也是没毛病的,当所有case都不匹配后,才会执行default。但是建议写在最后。

package main

import "fmt"

func main() {   
    switch a, b, c, x := 1, 2, 3, 2; x{
    default:
        fmt.Println("default")
    case a, b:
        fmt.Println("a|b")
    case c:
        fmt.Println("c")    
    }
}

如果不想break,可以使用fallthrough关键字来向下继续执行case

package main

import "fmt"

func main() {   
    switch a, b, c, x := 1, 2, 3, 2; x{
    default:
        fmt.Println("default")
    case a, b:
        fmt.Println("a|b")
        x += 1
        fallthrough
    case c:
        fmt.Println("c")    
    }
}

输出:
a|b
c

显示使用break组织fallthrough

package main

import "fmt"

func main() {   
    switch a, b, c, x := 1, 2, 3, 2; x{
    default:
        fmt.Println("default")
    case a, b:
        fmt.Println("a|b")
        x += 1
        break
        fallthrough
    case c:
        fmt.Println("c")    
    }
}

输出:
a|b

for

for后的表达式也可以省略圆括号
for后的花括号也不能另起一行

package main

import "fmt"

func main() {   
    for i, max := 0, 3; i < max; i++ {
        fmt.Println(i)
    }
}

使用for代替while

package main

import "fmt"

func main() {
    var x int   
    for x < 5 {
        fmt.Println(x)
        x++
    }
}

使用for range完成数据迭代

package main

import "fmt"

func main() {
    date := [4]string{"a", "b", "c", "d"}
    for i, str := range date {
        fmt.Println(i, str)
    }
}

输出:
0 a
1 b
2 c
3 d

goto break continue

最后简单介绍一下goto break continue这三个关键字。

goto
在C++中我们完全看不起goto,也禁止使用,但是在go中挺多地方使用了goto:
math/gamma.go中的代码片段:

for x < 0 {
    if x > -1e-09 {
      goto small
    }
    z = z / x
    x = x + 1
  }
  for x < 2 {
    if x < 1e-09 {
      goto small
    }
    z = z / x
    x = x + 1
  }

  if x == 2 {
    return z
  }

  x = x - 2
  p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6]
  q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7]
  return z * p / q

small:
  if x == 0 {
    return Inf(1)
  }
  return z / ((1 + Euler*x) * x)
}

break
用于switch for 等语句,终止整个语句块执行

continue
仅用于for循环,终止后续逻辑,进入下一轮循环。

Go语言学习之流程控制(The way to go)

原文:http://blog.csdn.net/wangshubo1989/article/details/57622109

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!