流程控制


• 流程控制语句作用

▪ 选择:根据条件跳转到不同的执行序列。

▪ 循环:根据条件反复执行某个序列。

▪ 跳转:据条件返回到某执行序列。

• 流程控制语句类型

▪ 条件语句:关键字为if、else和else if。

▪ 选择语句:关键字为switch、case和select。

▪ 循环语句:关键字为for和range。

▪ 跳转语句:关键字为goto。

条件语句


• 语法如下

// 1
if
condition {
...
}

// 2
if condition {
...
} else {
...
}

// 3
if condition {
...
} else if condition {
...
}

// 4
if condition {
...
} else if condition {
...
} else {
...
}

• 注意点

▪ 条件语句不需要使用括号()将条件包含起来。

▪ 条件语句无论语句体内有几条语句,花括号{}都必须存在。

▪ 条件语句的左花括号{必须与ifelse同处一行,否则编译器给出错误:syntax error: missing { after if clause。

▪ 条件语句的else必须和上一个语句体结束的右花括号}同处一行,否则编译器给出错误:syntax error: unexpected else, expecting }。

▪ 条件语句在if之后可以添加变量初始化语句,但需要使用分号;间隔。

if a := ; a >=  {
fmt.Println("OK")
}

选择语句


• 语法如下

switch condition {
case v0:
...
case v1:
...
case v2:
...
case v3:
...
case v4, v5, v6:
...
default:
...
}

• 注意点

▪ 选择语句中,左花括号{必须与switch同处一行。

▪ 选择语句中,case后可以使用常量,还可以使用变量。

package main

import "fmt"

func main() {
condition :=
caseValue := switch condition {
case caseValue:
fmt.Printf("0")
case :
fmt.Printf("1")
default:
fmt.Printf("Default")
}
}

▪ 选择语句中,单个case后可以出现多个结果选项。

▪ 选择语句中,不需要用break来明确退出一个case

▪ 选择语句中,只有在case中明确添加fallthrough关键字,才会继续执行下一个case

package main

import "fmt"

func main() {
condition := switch condition {
case :
fmt.Printf("0")
case :
fmt.Printf("1")
fallthrough
default:
fmt.Printf("Default")
}
}

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

package main

import "fmt"

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

跳转语句


• 语法如下

goto label

• 注意点

▪ 选择语句的语义非常简单,就是跳转到本函数内的某个标签处执行。

package main

import "fmt"

func main() {
i :=
for {
i++
if i >= {
goto finish
}
} finish:
fmt.Println("Finish")
}

循环语句


• 语法如下

// 普通循环
for i := ; i < N; i++ {
...
} // 数组循环
for i, v := range array {
...
} // 无限循环
for {
...
}

• 注意点

▪ 循环语句只支持for结构,不支持whiledo-while结构。

▪ 循环语句左花括号{必须与for处于同一行。

▪ 循环语句不支持以逗号为间隔的多赋值语句,支持使用多元赋值的方式来初始化多个变量。

package main

import "fmt"

func main() {
array := []int{, , , , , }
for i, j := , len(array)-; i < j; i, j = i+, j- {
array[i], array[j] = array[j], array[i]
}
fmt.Println(array)
}

▪ 循环语句支持continuebreak来控制循环,但提供了一个更高级的break,可以选择中断哪一层循环。

package main

import "fmt"

func main() {
JLoop1: // 标记循环1,此处不能有非循环代码,break label会跳出循环1
for j := ; j < ; j++ {
JLoop2: // 标记循环2,此处不能有非循环代码,break label会跳出循环2
for i := ; i < ; i++ {
if j < {
break JLoop2 // 跳出循环2
} if i > {
break JLoop1 // 跳出循环1
}
fmt.Println(j, i)
}
}
}

[golang note] 流程控制的更多相关文章

  1. Golang的流程控制

    流程控制 条件语句 例: var b bool = true if b{ fmt.Print("b是True") }else{ fmt.Print("b是false&qu ...

  2. golang之流程控制(注意点)

    Go在流程控制方面特点如下: 没有do和while循环,只有一个广义的for语句 switch语句灵活多变,还可以用于类型判断 if语句和switch语句都可以包含一条初始化子语句 break语句和c ...

  3. golang笔记——流程控制

    条件语句 if ... else if ... else 语句,如: { fmt.Println(">100") } < num { fmt.Println(" ...

  4. Golang - 流程控制

    目录 Golang - 流程控制 1. 选择结构 2. 循环结构 3. 跳转语句 Golang - 流程控制 1. 选择结构 if else语句: //package 声明开头表示代码所属包 pack ...

  5. golang(3):strings和strconv使用 & 时间和日期类型 & 指针类型 & 流程控制 & 函数

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

  6. golang基础之三-字符串,时间,流程控制,函数

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

  7. golang recover panic 流程控制的可达与不可达

    --------------------------流程控制可达----------------------------- package main import "fmt" fu ...

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

    欢迎访问我的博客和github! 今天咱们把烦人的事情丢一丢,继续来学习go的基础知识. 这篇文章记录go语言的流程控制和更多类型. 流程控制 for Go 只有一种循环结构:for 循环. 基本的 ...

  9. Golang通脉之流程控制

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

随机推荐

  1. java---多线程及线程的概念

    如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...

  2. [转]Tcpcopy简介与实战

    Tcpcopy简介 TCPCopy是一种请求复制(所有基于tcp的packets)工具 ,其功能是复制在线数据包,修改TCP/IP头部信息,发送给测试服务器,达到欺骗测试服务器的TCP 程序的目的,从 ...

  3. IOC和AOP的一些基本概念

    IOC和AOP的一些基本概念介绍 IOC 介绍 IOC 一.什么是IOC IoC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不 ...

  4. swift开发之--Protocol(协议)

    使用object-c语言的同学们肯定对协议都不陌生,但在swift中苹果将protocol这种语法发扬的更加深入和彻底. Swift中的protocol不仅能定义方法还能定义属性,配合extensio ...

  5. ios开发之 -- 5分钟集成融云的客服功能

    最近项目中遇到了客服的功能,首先想到的就是使用融云的功能,因为以前做的即时通讯的项目,用的都是融云的sdk,花了点时间研究了下,希望能帮到大家! 废话不多说,步骤如下: 一.申请融云账号 二.创建应用 ...

  6. 初始Dubbo

    1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...

  7. linux 命令集合收集(ubuntu)

    1.查看ubuntu版本号:cat /etc/issue  或者sudo lsb_release -a 2.查看内核版本信息:uname -a ,显示为4.4.0 x86_64版本内核

  8. OpenSSL创建私有CA

    1.编辑/etc/pki/tls/openssl.cnf [ CA_default ] dir             = /etc/pki/CA           # 工作目录certs      ...

  9. iOS 文件和数据管理 (可能会删除本地文件储存)

    转自:http://www.apple.com.cn/developer/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgramm ...

  10. 在用VMware虚拟机的时候,有时会发现打开虚拟机时提示“该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。否则,请按“取消(C)”按钮以防损坏。配置文件: D:\win10x64\Windows 10 x64.vmx。”这是由于虚拟机未正常关闭引起的,下面看看解决办法

    我们首先点击“获取所有权(T)”按钮,会发现弹出一个窗口,显示“ 无法打开虚拟机: D:\win10x64\Windows 10 x64.vmx获取该虚拟机的所有权失败.主机上的某个应用程序正在使用该 ...