go语言-golang基础-流程控制

1 流程控制
程序设计语言的流程控制语句,用于设定计算执行的次序,建立程序的逻辑结构。可以说,
流程控制语句是整个程序的骨架。
从根本上讲,流程控制只是为了控制程序语句的执行顺序,一般需要与各种条件配合,因此, 在各种流程中,会加入条件判断语句。流程控制语句一般起以下3个作用:

  • 选择,即根据条件跳转到不同的执行序列;
  • 循环,即根据条件反复执行某个序列,当然每一次循环执行的输入输出可能会发生变化;
  • 跳转,即根据条件返回到某执行序列。

Go语言支持如下的几种流程控制语句:

  • 条件语句,对应的关键字为if、else和else if;
  • 选择语句,对应的关键字为switch、case和select(将在介绍channel的时候细说); ? 循环语句,对应的关键字为for和range;
  • 跳转语句,对应的关键字为goto。

在具体的应用场景中,为了满足更丰富的控制需求,Go语言还添加了如下关键字:break、 continue和fallthrough。在实际的使用中,需要根据具体的逻辑目标、程序执行的时间和空 间限制、代码的可读性、编译器的代码优化设定等多种因素,灵活组合。
接下来简要介绍一下各种流程控制功能的用法以及需要注意的要点。

1.1 条件语句

if a < 5 {
      return 0
} else {
    return 1
}

关于条件语句,需要注意以下几点:

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

失败的原因在于,Go编译器无法找到终止该函数的return语句。编译失败的案例如下:

func example(x int) int {
    if x == 0 {
        return 5
    } else {
        return x
    }
}     

例子:

  段子:

  • 老婆给当程序员的老公打电话:下班顺路买十个包子,如果看到卖西瓜的,买一个。 当晚老公手捧一个包子进了家门...老婆怒道:你怎么只买一个包子?!老公甚恐,喃喃道: 因为我真看到卖西瓜的了。
  • 老婆:买十个包子,如果有卖西瓜的,买一个西瓜
  • 老公:如果有卖西瓜的,买一个包子,否则买十个包子
package main
import "fmt"
func main() {
    fmt.Println("买十个包子")
    var y string
    fmt.Print("有没有卖西瓜的:")
    fmt.Scan(&y)
    fmt.Println("你输入的是:", y)

    if y == "yes" {
        fmt.Println("买一个西瓜")
    }

}
package main

import "fmt"

func main() {
    //老公
    //如果有卖西瓜的,就买一个包子,否则就买10个包子
    var y string
    fmt.Print("有卖西瓜的啊?:")
    fmt.Scan(&y)

    if y == "yes" {
        fmt.Println("买一个包子")
    } else {
        fmt.Println("买10个包子")
    }
}

  else if

  • 成绩评优: [90, 100]=>优秀(A), [80, 90) => 良好(B), [60, 70) => 及格(C), [70, 80) => 及格(D), [0, 60) => 不及格(E)
  • 使用 if-else 语句实现
package main

import "fmt"

func main() {

    var score int
    fmt.Println("请输入成绩:")
    fmt.Scan(&score)

    if score >= 90 {
        fmt.Println("A")
    } else {
        if score >= 80 {
            fmt.Println("B")
        } else {
            if score >= 70 {
                fmt.Println("C")
            } else {
                if score >= 60 {
                    fmt.Println("D")
                } else {
                    fmt.Println("E")
                }
            }
        }
    }
}
  • 使用 else-if 语句实现
package main
import "fmt"
func main() {

    var score int
    fmt.Println("请输入成绩:")
    fmt.Scan(&score)

    if score >= 90 {
        fmt.Println("A")
    } else if score >= 80 {
        fmt.Println("B")
    } else if score >= 70 {
        fmt.Println("C")
    } else if score >= 60 {
        fmt.Println("D")
    } else {
        fmt.Println("E")
    }
}

1.2 选择语句

选择语句根据传入条件的不同,选择语句会执行不同的语句。下面的例子根据传入的整型变量i的不同而打印不同的内容:

switch i {
case 0:
    fmt.Printf("0")
case 1:
    fmt.Printf("1")
case 2:
    fallthrough
case 3:
    fmt.Printf("3")
case 4, 5, 6:
    fmt.Printf("4, 5, 6")
default:
       fmt.Printf("Default")
}

运行上面的案例,将会得到如下结果:

  • i = 0时,输出0;
  • i = 1时,输出1;
  • i = 2时,输出3;
  • i = 3时,输出3;
  • i = 4时,输出4, 5, 6;
  • i = 5时,输出4, 5, 6;
  • i = 6时,输出4, 5, 6;
  • i = 其他任意值时,输出Default。

比较有意思的是,switch后面的表达式甚至不是必需的,比如下面的例子:

switch {
case 0 <= Num && Num <= 3:
    fmt.Printf("0-3")
case 4 <= Num && Num <= 6:
    fmt.Printf("4-6")
case 7 <= Num && Num <= 9:
    fmt.Printf("7-9")
} 

在使用switch结构时,我们需要注意以下几点:

  • 左花括号{ 必须与switch处于同一行;
  • 条件表达式不限制为常量或者整数;
  • 单个case中,可以出现多个结果选项;
  • 与C语言等规则相反,Go语言不需要用break来明确退出一个case;
  • 只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case;
  • 可以不设定switch之后的条件表达式,在此种情况下,整个switch结构与多个if...else...的逻辑作用等同。

例子:

package main

import "fmt"

func main() {
//老婆老公买西瓜
    var yes string
    fmt.Println("有卖西瓜的吗?:(Y/y)")
    fmt.Scan(&yes)

    fmt.Println("老婆的想法:")
    fmt.Println("买十个包子")

    switch yes {
    case "y", "Y":
        fmt.Println("买一个西瓜")
    }

    fmt.Println("老公的想法:")
    switch yes {
    case "y", "Y":
        fmt.Println("买一个包子")
    default:
        fmt.Println("买十个包子")
    }
//判断分数所在等级
    var score int
    fmt.Println("请输入你的分数:")
    fmt.Scan(&score)

    switch {
    case score >= 90:
        fmt.Println("A")
    case score >= 80:
        fmt.Println("B")
    case score >= 70:
        fmt.Println("C")
    case score >= 60:
        fmt.Println("D")
    default:
        fmt.Println("E")
    }

}

1.3 循环语句

与多数语言不同的是,Go语言中的循环语句只支持for关键字,而不支持while和do-while 结构。关键字for的基本使用方法与C和C++中非常接近:

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

可以看到比较大的一个不同在于for后面的条件表达式不需要用圆括号()包含起来。Go语言 还进一步考虑到无限循环的场景,让开发者不用写无聊的for (;;) {} 和 do {} while(1);, 而直接简化为如下的写法:

sum := 0
for {
    sum++
    if sum > 100 {
        break
    }
}

在条件表达式中也支持多重赋值,如下所示:

a := []int{1, 2, 3, 4, 5, 6}
for i, j := 0, len(a) – 1; i < j; i, j = i + 1, j – 1 {
    a[i], a[j] = a[j], a[i]
}

使用循环语句时,需要注意的有以下几点。

  • 左花括号{ 必须与for处于同一行。
  • Go语言中的for循环与C语言一样,都允许在循环条件中定义和初始化变量,唯一的区别是,Go语言不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量。
  • Go语言的for循环同样支持continue和break来控制循环,但是它提供了一个更高级的break,可以选择中断哪一个循环,如下例:
for j := 0; j < 5; j++ {
  for i := 0; i < 10; i++ {
    if i > 5 {       break JLoop
       }
    fmt.Println(i)
  } }
JLoop: // ...

本例中,break语句终止的是JLoop标签处的外层循环。

例子:

package main

import "fmt"

func main() {
    //索引=>记录已经加到的n
    // 记录结果

    result := 0

    // 初始化语句,条件子语句;后置子语句
    //result = +1

    for i := 1; i <= 100; i++ {
        result += i
    }

    fmt.Println(result)

    result = 0
    i := 1
    for i <= 100 {
        result += i
        i++
    }
    fmt.Println(result)

    /*
        i = 0
        for {
            fmt.Println(i)
            i++
        }
    */
    // 字符串 数组 切片 映射 管道
    desc := "我爱中国"
    for i, ch := range desc {
        fmt.Printf("%d %T %q \n", i, ch, ch)
    }

}

1.4 跳转语句

goto语句被多数语言学者所反对,谆谆告诫不要使用。但对于Go语言这样一个惜关键字如金的语言来说,居然仍然支持goto关键字,无疑让某些人跌破眼镜。goto还是会在一些场合下被证明是最合适的。
goto语句的语义非常简单,就是跳转到本函数内的某个标签,如:

func myfunc() {
    i := 0
    HERE:
    fmt.Println(i)
    i++
    if i < 10 {
          goto HERE
    }
}

原文地址:https://www.cnblogs.com/malukang/p/12669658.html

时间: 2024-08-27 05:01:37

go语言-golang基础-流程控制的相关文章

小白学 Python(8):基础流程控制(下)

人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变量基础操作 小白学 Python(5):基础运算符(上) 小白学 Python(6):基础运算符(下) 小白学 Python(7):基础流程控制(上) 循环结构 循环结构一般而言,就是一直做某件事情,直到满足某种条件. 正常的 while 循环 比如:学习使我快乐,一直学习一直快乐. 这好像和我上面

GoLang的流程控制

流程控制 1.三大流程控制 顺序控制 分支控制 循环控制 2.顺序控制 程序从上到下逐行地执行,中间没有任何判断和跳转 3.分支控制 分支控制就是让程序有选择执行.有下面三种形式 单分支 双分支 多分支 3.1.单分支 if 条件表达式 { // } 3.2.双分支 if 条件表达式 { // } else { // } 3.3.多分支 if 条件表达式 { // } else if 条件表达式2 { // } ... else { } 3.4.嵌套分支 if 条件表达式 { if 条件表达式2

黑马程序员——Java基础---流程控制

一.概述 Java提供了两种基本的流程控制结构:分支结构和循环结构.其中分支结构用于是根据条件来选择执行某段代码,循环结构则是根据循环条件重复执行某段代码.分支语句有if和switch两种,循环语句有for.while和do while三种.除此之外,jdk1.5还提供了foreach循环,同时java还提供了break和continue来控制程序的循环结构. 一.正文 1.顺序结构 这是程序最常见的结构,如果没有流程控制,java就会从上到下一次执行每条语句,这个没什么可说的. 2.分支结构

python基础---流程控制

流程控制 1.if判断 a.单分支 if 条件: 满足条件后要执行的代码 age_of_oldboy=50 if age_of_oldboy > 40:     print('too old,time to end')   输出: too old,time to end b.双分支 if 条件: 满足条件执行代码 else: if条件不满足就走这段 age_of_oldboy=50 if age_of_oldboy > 100:    print('too old,time to end')e

java基础流程控制

流程控制结构导图: 今天主要学习了流程控制的语句是如何使用的: if格式: if (条件) { 循环体 } // 条件成立再执行循环体 while (条件) { } 以下是用循环语句写的一些小程序 for (int i = 1;i <= 100;i++) { if (i % 2 != 0) { continue; // continue 结束本次循环 } // break 结束本层循环 System.out.println(i); // 输出100以内的偶数 } for (int i = 1;i

java基础 流程控制和条件语句,循环语句

顺序结构 程序的顺序结构: 如果代码里没有流程控制,程序是按照书写的格式从上而下一行一行执行的, 一条语句执行完之后继续执行下一条语句,中间没有判断和跳转,直到程序的结束. if语句 if语句使用boolean表达式或boolean值作为选择条件,有三种结构形式: if翻译成中文,表示如果......,就干......., 第一种结构形式: if(boolean表达式) { 条件执行体 } if后面跟的{}表示一个整体-代码块,我们在这称为条件执行体,也就是说条件为true,就执行这一块代码块.

【iOS开发基础】【C语言】03 - 流程控制

一.流程控制结构 (1)顺序结构:按照书写顺序执行每一条语句. (2)选择结构:对给定的条件进行判断,根据判断结果来决定执行哪一段代码. (3)循环结构:在给定条件成立的情况下,反复执行某一段代码. 二.选择结构 - if (一)if简单使用 1) 第一种结构: 如果条件为真,就执行后面的语句,否则不执行. if(条件) { 语句1: 语句2: …… } 2) 第二种结构: 如果条件成立就执行语句1,否则执行语句2. if(条件) { 语句1: } else { 语句2: } 3) 第三种结构:

Go语言中的流程控制

1 概述 Go语言提供了条件分支 if,状态分支 switch,循环 for,跳转 goto,延迟执行 defer,这些流程控制语句.分别作说明如下: 2 条件分支 if 依据条件是否满足确定执行哪个分支.语法: if 条件 1 { 分支 1 } else if 条件 2 { 分支 2 } else if 条件 ... { 分支 ... } else { 分支 else } 流程图: Go是强类型,要求条件表达式严格返回布尔型数据! 3 状态分支 switch 3.1 基础 状态分支,依据特定的

go语言-golang基础-数据类型数组,数组切片,映射

7.7 数组 数组是Go语言编程中最常用的数据结构之一.顾名思义,数组就是指一系列同一类型数据的集合.数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度. 以下为一些常规的数组声明方法: [32]byte // 长度为32的数组,每个元素为一个字节 [2*N] struct { x, y int32 } // 复杂类型数组 [1000]*float64 // 指针数组 [3][5]int // 二维数组 [2][2][2]float64 // 等同于[2