golang控制结构

2019-12-30  本文已影响0人  程序小白菜

go中只有一种循环控制结构, for。 没有do或while循环。

Go的循环有三种形式,只有其中的一种使用分号
for init; condition;post { } //普通的循环

sum := 0
for i := 0; i < 10; i++ {
  sum += i
}

for condition {} //和while一样
for {} //死循环

break和continue

//break可提前退出循环,终止当前的循环
for i := 0 ; i < 10 ; i++ {
    i f i > 5 {
        break 终止这个循环,只打印 0 到 5
    }
    println(i)
}

//当嵌套循环时,可在break后指定标签, 用标签决定哪个循环被终止
J: for j:=0; j < 5; j++ {
    for i:= 0; i < 10; i++ {
        if i > 5 {
            break J
        }
        println(i)
    }
}
for i := 0; i < 10; i++ {
    if i > 5 {
        continue
    }
    println(i)
}
//当对slice和array循环时 range返回序号做键,序号对应的内容做值
list := []string{"a", "b", "c", "d", "e", "f"}
for k, v := range list {
    //dosomething
}

//可字符串上直接使用 range
for pos, char := range "aΦx" {
    fmt.Printf("character '%c' starts at byte position %d\n", char, pos)
}

go的条件判断结构

go的switch非常灵活,表达式不必是常量或者整数, 执行过程自上而下,直到找到匹配项。如果switch没有表达式,会匹配true

func unhex(c byte) byte {
    switch {
    case '0' <= c && c <= '9':
        return c - '0'
    case 'a' <= c && c <= 'f':
        return c - 'a' + 10
    case 'A' <= c && c <= 'F':
        return c - 'A' + 10
    }
    return 0
}

switch不会匹配失败后自动向下尝试,但是可以使用 fallthrough 使其这样做

//没有使用fallthrough
switch i {
case 0: // 空的 case 体
case 1:
    f() // 当 i == 0 时, f 不会被调用!
}

//有使用fallthrough
switch i {
case 0: fallthrough
case 1:
    f() // 当 i == 0 时, f 会被调用!
}

用default 可以指定当其他所有分支都不匹配的时候的行为。

switch i {
case 0:
case 1:
    f()
default:
    g() // 当 i 不等于 0 或 1 时调用
}
//if-else
if age >= 18 {
    fmt.Println("成年")
} else {
    fmt.Println("未成年")
}

//if 和 switch 接受初始化语句,通常用于设置一个(局部)变量。
if !false {
  fmt.Println("true")
}

f, err := os.Open(filename, os.O_RDONLY, 0)
if err != nil {
      return err
}
dosomething(f)
      
上一篇 下一篇

猜你喜欢

热点阅读