Golang——流程控制

Cici冬雪 · · 443 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

常用ifforswitchgoto属于扩展的

注意:Go 没有三目运算符,所以不支持 ?: 形式的条件判断。

if else

func main() {
    a := 1
    if a < 0 { //格式比较严格,{不换行
        fmt.Println("小于0")
    } else if a == 0 {
        fmt.Println("等于0")
    } else { //格式比较严格,{不换行
        fmt.Println("大于0")
    }
}

if判断特殊写法

在if表达式之前添加一个执行语句,再根据变量值进行判断。

func main() {
    if a := 1; a < 0 { 
        fmt.Println("小于0")
    } else if a == 0 {
        fmt.Println("等于0")
    } else {
        fmt.Println("大于0")
    }
}

for

for 初始化语句; 条件表达式; 结束语句 {
    循环体语句
}
func main() {
    array := []byte{1, 2, 3}
    for i := 0; i < len(array); i++ {
        fmt.Println(array[i])
    }

    //初始语句可以被忽略,但是分号需要保留
    i := 0
    for ; i < len(array); i++ {
        fmt.Println(array[i])
    }

    //初始语句和结束语句都可以省略
    //次写法类似其它编程芋圆中华你乖乖的while
    j := 0
    for j < len(array){
        fmt.Println(array[j])
        j++
    }
    
    //无限循环
    for {
        //通过break、goto、return、panic语句强制退出循环
    }
}

for range(键值循环)

可遍历数组、切片、字符串、map以及channel
1.数组、切片、字符串返回索引和值;
2.map返回键和值;
3.channel只返回通道内的值;

func main() {
    str := "Hello"
    for k,v := range str {
        fmt.Printf("%d-%c\n", k, v)
    }
}

switch case

func main() {
    a := 1
    switch a {
    case 0:
        fmt.Println("0")
    case 1:
        fmt.Println("1")
    default:
        fmt.Println("other")
    }
}
func main() {
    switch a := 1; a {
    case 0, 2:
        fmt.Println("0或者2")
    case 1, 3:
        fmt.Println("1或者3")
    default:
        fmt.Println("other")
    }
}
func main() {
    a := 1
    switch {
    case a > 1:
        fmt.Println("大于1")
    case a == 1:
        fmt.Println("等于1")
    default:
        fmt.Println("小于")
    }
}

fallthrough 可以执行满足条件的case的,再无无条件取执行下一个case,为了兼容C语言而设计。
已经是deprecated。

func main() {
    a := 1
    switch {
    case a > 1:
        fmt.Println("大于1")
    case a == 1:
        fmt.Println("等于1")
        fallthrough
        case a == 0:
        fmt.Println("等于0")
    default:
        fmt.Println("小于0")
    }
}
// 等于1
// 等于0

goto

尽量少用

func main() { 
    for i := 0; i < 5; i++ {
        for j := 0; j < 5; j++{
            if j == 3 {
                // break //跳出当前for循环
                // continue //继续下一次循环
                goto gotoTag
            }
            fmt.Printf("%d-%d\n",i, j)
        }
    }

    gotoTag:
        fmt.Printf("goto跳出")
}

break(跳出循环)

可以结束forswitchselect的代码块。
break也可以添加标签,表示退出代码块,必修定义在对应的forswitchselect的代码块上。尽量少用。

func main() { 
    BREAKTAG:
        for i := 0; i < 5; i++ {
            for j := 0; j < 5; j++{
                if j == 3 {
                    // break //跳出当前for循环
                    // continue //继续下一次循环
                    break BREAKTAG
                }
                fmt.Printf("%d-%d\n",i, j)
            }
        }

    fmt.Printf("break跳出")
}

continue(继续下次循环)

只用在 for循环中。
continue也可以加标签,尽量少用。


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

本文来自:简书

感谢作者:Cici冬雪

查看原文:Golang——流程控制

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

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