Go在流程控制方面特点如下:

  • 没有do和while循环,只有一个广义的for语句
  • switch语句灵活多变,还可以用于类型判断
  • if语句和switch语句都可以包含一条初始化子语句
  • break语句和continue语句可以跟一条label标签语句,用于标识需要终止或继续的代码块
  • defer语句可以使我们更加方便地执行异常捕获和资源回收任务
  • select语句也可以用于多分支选择,但只与通道配合使用
  • go语句用于异步启动goroutine并执行指定函数

for range 注意点:

  • 对数组、切片或者字符串值进行迭代,:=左边只有一个迭代变量时,要注意只能得到元素的索引,而不是元素。
  • 迭代没有任何元素的数组值、为nil的切片值、为nil的字典值、为“”的字符串值,不会执行for语句中的代码。for在一开始就会结束。因为这些值长度是0
  • 迭代为nil的通道值会让当前流程永远阻塞在for语句上。

defer 控制语句

package main

import (
"fmt"
) //outerFunc是外围函数
//defer执行顺序是,先进后出,延迟调用指定的函数
//当外围函数中语句执行完毕时,只有延迟函数都执行完毕,外围函数才真的结束
//当执行外媒函数中的return时,只有延迟函数都执行完毕,外围函数才返回
//当外围函数中的代码引发运行错误时,只有延迟函数执行完毕,运行时的错误才会被扩散至调用函数。 //因此defer常用在执行释放资源或异常处理等收尾任务
//defer语句在外围函数体中位置不限,数量不限 func printNumbers() {
for i := ; i < ; i++ {
//defer被压进一个栈,函数完毕前一刻,先进后出,所以是43210
defer func() {
fmt.Printf("%d", i)
}()
}
} func printNumbers1() {
for i := ; i < ; i++ {
//defer被压进一个栈,函数完毕前一刻,先进后出,所以是43210
defer func(n int) {
fmt.Printf("%d", n)
}(i)
}
}
func printNumbers2() {
for i := ; i < ; i++ {
//defer被压进一个栈,函数完毕前一刻,先进后出,所以是43210
defer func(n int) {
fmt.Printf("%d", n)
}(i * )
}
} func main() {
printNumbers()
fmt.Println()
printNumbers1()
fmt.Println()
printNumbers2()
}

golang之流程控制(注意点)的更多相关文章

  1. Golang的流程控制

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

  2. [golang note] 流程控制

    流程控制 • 流程控制语句作用 ▪ 选择:根据条件跳转到不同的执行序列. ▪ 循环:根据条件反复执行某个序列. ▪ 跳转:据条件返回到某执行序列. • 流程控制语句类型 ▪ 条件语句:关键字为if.e ...

  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. Python3.5 源码安装 Ubuntu16.04环境

    安装源码编译所需的各种依赖库:(Ubuntu16.04环境下) sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-de ...

  2. MFGTool2批量操作

    /********************************************************************************* * MFGTool2批量操作 * ...

  3. BZOJ4886: [Lydsy1705月赛]叠塔游戏(环套树森林&贪心)

    4886: [Lydsy1705月赛]叠塔游戏 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 198  Solved: 76[Submit][Stat ...

  4. C#典型案例及分析

    1.简单工厂计算器

  5. <script type="text/template">是干什么的,为什么要把html写在js中? 这是什么编程语言风格,都能这样用吗?

    这一段存放了一个模板.在js里面,经常需要使用js往页面中插入html内容.比如这样: var number = 123; $('#d').append('<div class="t& ...

  6. 使用ntp从时间同步服务器更新centos系统时间的方法

    CentOS系统时间同步的步骤如下: 复制代码 代码如下: cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtimentpdate us.pool.ntp ...

  7. HDU 1717 小数化分数2(最大公约数)

    小数化分数2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  8. 使用Javamail发送邮件Util

    maven: <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artif ...

  9. Rhythmk 学习 Hibernate 09 - Hibernate HQL

    1.初始数据 @Test public void test01() { Session session = null; try { session = HibernateUtil.getSession ...

  10. delphi 组件容器TObjectList代替List

    delphi 组件容器TObjectList代替List TObjectList objList->delete(0); 这个会释放第0行元素的对象 class TTabFormInfo { p ...