golang控制结构

程序小白菜 · · 554 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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可提前退出循环,终止当前的循环, 也可在break后指定标签, 用标签决定哪个循环被终止
//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)
    }
}
  • 利用 continue 让循环进入下一个迭代,而略过剩下的所有代码
for i := 0; i < 10; i++ {
    if i > 5 {
        continue
    }
    println(i)
}
  • range 是迭代器,可用于循环, 用于slice, array, map, channel, string
//当对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的条件判断结构

  • switch结构

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 结构
//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)
      

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:程序小白菜

查看原文:golang控制结构

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

554 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传