美文网首页
Golang——流程控制

Golang——流程控制

作者: Cici冬雪 | 来源:发表于2020-05-14 07:31 被阅读0次

常用ifforswitchgoto属于扩展的

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

1.条件语句 if else

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

注意:
1.不需要使用括号()将条件包含起来;
2.无论语句体内有几条语句,花括号{}都是必须存在的;
3.左花括号{必须与if或者else在同一行;
4.在if之后,条件语句之前,可以添加变量初始化语句,使用;间隔;
5.在有返回值的函数中,不允许将“最终的”return 语句包含在if... else ...结构中,否则编译报错。

if判断特殊写法
在if之后,条件语句之前,可以添加变量初始化语句,使用;间隔

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

2.选择语句

switch case

func main() {
    a := 1

    switch a {
        case 0: fmt.Println("0")
        case 1: fmt.Println("1")
        default: fmt.Println("other")
    }

    a := 3
    switch a {
        case 0: 
            fmt.Println("0")
        case 1: 
            fmt.Println("1")
        default: 
            fmt.Println("other")
    }
}

注意:
1.左花括号{必须与switch在同一行;
2.条件表达式不限制为常量或者整数;
3.单个case中,可出现多个结果选项;
4.Go语言不需要break来明确跳出一个case;
5.只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case
6.可以不设定switch之后的条件表达式,此时与if... else ...逻辑左右等。

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,为了兼容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

select

用于通道类型

select {
    case communication clause  :
       statement(s);      
    case communication clause  :
       statement(s);
    /* 你可以定义任意数量的 case */
    default : /* 可选 */
       statement(s);
}

3.循环语句

只支持for,不支持while、do-while等。

for

for 初始化语句; 条件表达式; 结束语句 {
    循环体语句
}

注意:
1.左花括号{必须与for在同一行;
2.可以在循环条件中的定义和初始化变量,但是,不支持以逗号为间隔的多个赋值语句;
3.使用 breakcontinue可控制循环;

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语句强制退出循环
    }
}

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也可以加标签,尽量少用。

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)
    }
}

中英文混杂的字符串,需要用for range循环

4.跳转语句

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跳出")
}

练习题

99乘法表

    for i := 1; i < 10; i++ {
        for j := 1; j <= i; j++ {
            fmt.Printf("%d * %d = %d  ", j, i, i * j)
        }
        fmt.Print("\n")
    }

水仙花数

水仙花数是指一个3位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)

package main

import (
    "fmt"
    "math"
)

func main(){
    fmt.Println("11")
    fmt.Println(math.Pi)
    for i := 100; i < 1000; i++ {
        //百位
        a := i/100
//      fmt.Println(a)
        //十位
        b := i%100/10
//      fmt.Println(b)
        //个位
        c := i%100%10
//      fmt.Println(c)
        sum := math.Pow(float64(a), 3) + math.Pow(float64(b), 3) + math.Pow(float64(c), 3)
//      fmt.Println(sum)
        if int(sum) == i {
            fmt.Printf("%d^3+%d^3+%d^3=%d\n", a, b, c, int(sum))
        }
    }
}

200~1000以内的素数

package main

import (
    "fmt"
)

//质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
func isSushu(x int)bool{
    for i := 2; i < x; i++ {
        if x%i == 0 {
            return false
        }
    }
    return true
}

func main(){
    for i := 200; i < 1000; i++ {
        // 用函数
        // if isSushu(i) {
        //  fmt.Println(i)
        // }
        //不用函数
        isSushuFlag := true
        for j := 2; j < i; j++ {
            if i%j == 0 {
                isSushuFlag = false
                break
            } 
        }
        if isSushuFlag {
            fmt.Println(i)
        }
    }
}

相关文章

  • Golang基础(二)——流程控制语句

    Golang基础——流程控制语句 @([07] golang)[Go总结] [TOC] for循环语句 go只有f...

  • Golang流程控制

    Golang流程控制 Golang当中的流程控制ifif语句由一个布尔表达式后紧跟一个或多个语句组成Go变成语言种...

  • Golang:流程控制

    流程控制是每种编程语言走向和执行次序的重要部分 golang中最常用的流程控制有if和for,而switch和go...

  • Golang——流程控制

    常用if和for,switch和goto属于扩展的 注意:Go 没有三目运算符,所以不支持 ...?...:......

  • 09-GoLang流程控制

    选择结构if C语言中有三目运算符 ?: Go语言中没有,所有用三目解决的问题使用 if-else 来解决 C...

  • 5.Golang流程控制

    一、程序结构说到流程控制,必须先看下 Go 语言的程序结构: 程序的初始化和执行都起始于 main package...

  • Golang基础(二) | 流程控制

    if if也许是各种编程语言中最常见的了,它的语法概括起来就是:如果满足条件就做某事,否则做另一件事。Go里面if...

  • Golang入门四:流程控制

    条件语句 选择语句 循环语句 跳转语句goto

  • Golang 流程控制 循环 函数写法

    学习一门新的编程语言,首先应该掰扯清楚的是,跟自己既有掌握的语言之间写法的区别,之前的文章,介绍了Golang中的...

  • golang学习笔记(二):流程控制

    欢迎访问我的博客和github! 今天咱们把烦人的事情丢一丢,继续来学习go的基础知识。 这篇文章记录go语言的流...

网友评论

      本文标题:Golang——流程控制

      本文链接:https://www.haomeiwen.com/subject/aalznhtx.html