程序的流程控制主要包括三种不同的结构,分别是顺序结构、选择结构和循环结构。

² 顺序结构最为简单,程序执行时,按照语句的顺序自上而下依次执行。

² 选择结构是根据条件表达式的结果选择执行某些语句。

² 循环结构是重复执行执行某些语句。

3.1 选择结构

3.1.1 if语句的语法:

// 1

if condition {

...

}

// 2

if condition {

...

else {

...

}

// 3

if condition {

...

else if condition {

...

}

// 4

if condition {

...

else if condition {

...

else {

...

}

注意事项:

  1. 不需要使用括号()将条件包含起来。
  2. 无论语句体内有几条语句,花括号{}都必须存在。
  3. 左花括号{必须与if或else同处一行,否则有编译器错误
  4. else必须和上一个语句体结束的右花括号}同处一行,否则有编译错误
  5. 在if之后可以添加变量初始化语句,但需要使用分号;间隔

惯用法:if 语句条件前面可以前置一条初始化语句,而go语言中的函数可以返回多个值,有很多函数第二个返回值是 error 类型,则我们可以通过

if v, err := func(); err == nil {

  //逻辑语句

}

四种不同if结构的案例如下:

package main

import "fmt"

func main() {

fmt.Println("请输入您的成绩(0~100)")

var grade int

fmt.Scanln(&grade)

// 1 错误判断

if (grade < 0) || (grade > 100) {

fmt.Println("您输入的成绩有误!")

return

}

// 2 判断是否及格

if grade >= 60 {

fmt.Println("及格")

else {

fmt.Println("不及格")

}

// 3 打印等级

if (grade >= 90) && (grade <= 100) {

fmt.Println("A")

else if (grade >= 80) && (grade < 90) {

fmt.Println("B")

else if (grade >= 70) && (grade < 80) {

fmt.Println("C")

else if (grade >= 0) && (grade < 70) {

fmt.Println("D")

}

// 4 比较两个数值的大小

fmt.Println("请输入两个整数:")

var a, b int

fmt.Scanln(&a, &b)

if a > b {

fmt.Println(a, "大于", b)

else if a < b {

fmt.Println(a, "小于", b)

else {

fmt.Println(a, "等于", b)

}

}

3.1.2 switch语句

switch语句的语法:

switch condition {

case v0:

...

case v1:

...

case v2:

...

case v3:

...

case v4, v5, v6:

...

default:

...

}

注意事项:

1.左花括号{必须与switch同处一行。

2.case后可以使用常量,还可以使用变量。

package main

import "fmt"

func main() {

condition := 0

caseValue := 0

switch condition {

case caseValue:

fmt.Println("0")

case 1:

fmt.Println("1")

default:

fmt.Println("Default")

}

}

注意事项:

  1. 单个case后可以出现多个结果选项。
  2. 不需要用break来明确退出一个case。
  3. 只有在case中明确添加fallthrough关键字,才会继续执行下一个case。

package main

import "fmt"

func main() {

condition := 1

switch condition {

case 0:

fmt.Println("0")

case 1:

fmt.Println("1")

fallthrough

default:

fmt.Println("Default")

}

}

可不设定switch后的条件表达式,在此种情况下整个switch结构与if...else...的逻辑等同。

package main

import "fmt"

func main() {

num := 1

switch {

case 0 <= num && num <= 3:

fmt.Println("0-3")

case 4 <= num && num <= 6:

fmt.Println("4-6")

case 7 <= num && num <= 9:

fmt.Println("7-9")

}

}

例子:根据输入的年份月份计算月份的天数?

package main

import "fmt"

func main() {

fmt.Println("请输入年份月份:")

var month int

var year int

fmt.Scanln(&year, &month)

switch month {

case 1, 3, 5, 7, 8, 10, 12:

fmt.Println("31天")

case 4, 6, 9, 11:

fmt.Println("30天")

case 2:

if (year%4 == 0 && year%100 != 0) || (year%400 == 0) {

fmt.Println("29天")

else {

fmt.Println("28天")

}

default:

fmt.Println("输入的月份有误!")

}

}

3.2 循环结构

接下来,我们来看循环结构,在其它编程语言中,循环结构一般至少包括for、while和do while语句三种,但是在Go语言中,循环结构只有for语句,没有while和do while语句。因为for语句经过变体是可以完全替代其它语句的,这也体现了Go语言的简洁性。

3.2.1 for语句

for语句的语法如下:

// 普通循环

for 初始化表达式; 条件表达式; 步进表达式 {

循环体语句

}

首    先执行初始化表达式,然后执行条件表达式,如果条件表达式的结果为真,执行循环体语句和步进表达式。然后再回到条件表达式进行判断,周而复始的重复执行。如果条件表达式的结果为假,直接跳出for循环,意味这整个for循环结束。

普通for循环的流程图:

我们看一个for循环的例子,求1~100的数值的和。

package main

import "fmt"

func main() {

//保存结果

var sum int = 0

// i表示1~100

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

sum = sum + i

}

fmt.Println("sum:", sum)

}

省略表达式1:

package main

import "fmt"

func main() {

var sum int = 0

i := 1

for ; i <= 100; i++ {

sum = sum + i

}

fmt.Println("sum:", sum)

}

省略表达式2:

package main

import "fmt"

func main() {

var sum int = 0

i := 1

for ; ; i++ {

if i > 100 {

break

}

sum = sum + i

}

fmt.Println("sum:", sum)

}

省略表达式3:

package main

import "fmt"

func main() {

var sum int = 0

i := 1

for {

if i > 100 {

break

}

sum = sum + i

i++

}

fmt.Println("sum:", sum)

}

数组循环:

// 数组循环

for i, v := range array {

...

}

注意事项:

1) 只支持for结构,不支持while和do-while结构。

2) 左花括号{必须与for处于同一行。

3) 不支持以逗号为间隔的多赋值语句,支持使用多元赋值的方式来初始化多个变量。这个很好判断,在一个表达式中不允许有多个赋值语句,即:=或=。

package main

import "fmt"

func main() {

array := []int{1, 2, 3, 4, 5, 6}

for i, j := 0, len(array)-1; i < j; i, j = i+1, j-1 {

array[i], array[j] = array[j], array[i]

}

fmt.Println(array)

}

3.2.2 continue和break语句

continue语句在for循环结构中的作用是结束本次循环,即跳过循环体中下面还没有执行的语句,接着进行下一次循环。break语句在循环结构中的作用是跳出循环体,提前结束循环。

例如:打印1~10之间可以被3整除的数下:

package main

import "fmt"

func main() {

for i := 1; i <= 10; i++ {

if i%3 != 0 {

continue

}

fmt.Println("i=", i)

}

}

3.3 goto语句

goto语句是跳转语句,天生要和标签配合使用。可以让程序无条件的跳转到标签之处继续执行。一般的语法格式:

goto LABEL

...

...

...

LABEL:

案例如下:

package main

import "fmt"

import "time"

func main() {

i := 0

for {

i++

if i >= 10 {

goto FINISH

}

fmt.Print(i, "  ")

time.Sleep(1 * time.Second)

}

FINISH:

fmt.Println("\nFinish")

}

第三章 go语言 程序的流程控制的更多相关文章

  1. 第二章(java程序设计)第三章(语言基础)

    第二章 2.1 对象 对象的概念是由现实世界引入问题模型: 对象包含有:状态和行为.具体地来说是: 数据封装:对象的方法的作用就是:将内部变量封装起来,提供给外界交互的窗口.(实现对数据的隐藏) 继承 ...

  2. linux内核代码注释 赵炯 第三章引导启动程序

    linux内核代码注释 第三章引导启动程序 boot目录中的三个汇编代码文件   bootsect.s和setup.s采用近似intel的汇编语法,需要8086汇编器连接器as86和ld86 head ...

  3. Go语言 数据类型,流程控制

    Go语言 数据类型,流程控制 人生苦短,Let's Go ! package main // 必须要有一个main包 import "fmt" func main() { fmt. ...

  4. Go语言基础之流程控制

    Go语言基础之流程控制 流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”. Go语言中最常用额流程控制有if和for,而switch和goto主要是为了简化代 ...

  5. GO语言学习——Go语言基础之流程控制一

    Go语言基础之流程控制 if else(分支结构) package main import "fmt" // if条件判断 func main(){ // age := 19 // ...

  6. 第2章 Java基本语法(下): 流程控制--项目(记账本)

    2-5 程序流程控制 2-5-1 顺序结构 2-5-2 分支语句1:if-else结构 案例 class IfTest1{ public static void main(String[] args) ...

  7. 1.4 Go语言基础之流程控制

    流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的"经脉". Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码. ...

  8. Go 从入门到精通(三)字符串,时间,流程控制,函数

    一.strings和strconv的使用 strings strings.HasPrefix(s string,preffix string) bool:判断字符串s是否以prefix开头 stirn ...

  9. Go语言学习笔记-流程控制(二)

    Go语言流程控制 字典类型Map 1.上节遗留:map字典类型 变量声明:var myMap map[string] PersonInfo 其中,myMap是变量名,string是键的类型,Perso ...

随机推荐

  1. Chrome浏览器调试技巧

    本文主要讲解针对chrome浏览器的调试方案,对于其他浏览器其实大同小异. 先来入门一点的 DOM元素调试 看上图: 以上图表明的1,2,3,4,5标记说明: 1,为移动设备模拟器,chorme现在是 ...

  2. String 经常用法最优算法实现总结 (二)

    1. String getOrderedString(boolean isDuplicated, String - str) 说明: Orders all characters in the inpu ...

  3. 为Android Studio设置HTTP代理

    大陆的墙非常厚非常高.初次安装Android Studio下载SDK等必然失败,设置代理方法例如以下: 1. 到android studio安装文件夹,打开bin文件夹.编辑idea.properti ...

  4. 数据结构--二叉查找树的java实现

    上代码: package com.itany.erchachazhaoshu; public class BinarySearchTree<T extends Comparable<? s ...

  5. MPSOC之7——开发流程uramdisk

    用petalinux的预编译目录里有rootfs文件,选择rootfs.tar.gz作为初始输入. 1.原始文件-->uramdisk 1.1 解压原始rootfs.tar.gz,得到若干文件 ...

  6. 添加用户useradd,给用户设置修改密码passwd,修改用户信息usermod,修改用户密码状态chage,删除用户userdel,查询用户及组id,切换用户su,查看当前环境变量env

    useradd 用户名 passwd 用户名,给指定用户设密码 passwd给当前用户设密码 添加一个用户系统会自动在以下文件或目录创建对应用户信息: [root@localhost ~]# grep ...

  7. 【java】Vector

    package com.tn.collect; import java.util.Enumeration; import java.util.Iterator; import java.util.Ve ...

  8. iOS MJRefresh下拉、上拉刷新自定义以及系统详细讲解

    更新: MJRefresh 更新功能,默认根据数据来源 自动显示 隐藏footer,这个功能可以关闭 DoctorTableView.mj_footer.automaticallyHidden = N ...

  9. mkpasswd 随机密码生成

    root@op-admin:~# mkpasswd -l -n usage: mkpasswd [args] [user] where arguments are: -l # (length of p ...

  10. scala写算法-快排

    快排算法很经典,今天用scala的函数式思维来整理一下并实现: def qsort(list: List[Int]):List[Int]=list match { case Nil=>Nil c ...