本文首发于公众号:Hunter后端

原文链接:Golang基础笔记六之流程控制

本篇笔记介绍 Golang 里流程控制相关的一些语法,以下是本篇笔记目录:

  1. 条件语句
  2. 循环语句

1、条件语句

1. if-else 语句

if-else 语句的基本语法如下:

if condition {
}else if condition {
}else {
}

下面是一个示例:

num := 10
if num <= 5 {
    fmt.Println("num 小于等于 5")
} else if num > 5 && num <= 10 {
    fmt.Println("num 大于 5 小于等于 10")
} else {
    fmt.Println("num 大于 10")
}

if 语句中,还可以包含一个初始化语句,用于条件判断之前执行一些操作:

if num := 10; num <= 5 {
    fmt.Println("num 小于等于 5")
} else if num > 5 && num <= 10 {
    fmt.Println("num 大于 5 小于等于 10")
} else {
    fmt.Println("num 大于 10")
}

注意:这里 num 这个变量的作用域仅限于 if-else 块。

这里的 if-else 语句,除了最开始的 if 语句是必需的外,后面的 else-if 和 else 模块都是可选的。

2. switch 语句

switch 语句有两种形式,一种是表达式 switch,一种是类型 switch。

1. 表达式 switch

下面这个示例是基于表达式的值来执行不同的模块:

day := 4
switch day {
case 1, 2, 3, 4, 5:
    fmt.Println("工作日")
case 6:
    fmt.Println("星期六")
case 7:
    fmt.Println("星期日")
default:
    fmt.Println("非法星期数")
}

下面这个示例是无表达式的,其效果等同于 if-else 语句:

score := 80
switch {
case score >= 90:
    fmt.Println("优秀")
case score >= 80:
    fmt.Println("良好")
case score >= 70:
    fmt.Println("一般")
default:
    fmt.Println("差劲")
}
2. 类型 switch

类型 switch 用于根据变量的类型来执行不同的代码块,通常用于处理接口类型的变量,接口相关的内容后面再介绍,这里先直接使用,使用方式和前面的 switch 类似:

func printType(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("%v 是整数类型\n", v)
case string:
fmt.Printf("%v 是字符串类型\n", v)
default:
fmt.Printf("%v 是其他类型\n", v)
}
} func main() {
num := 10
str := "hello"
printType(num)
printType(str)
}

2、循环语句

循环语句就是 for 循环操作了,这里介绍几种类型:

1. for 循环

for 循环的用法和其他语言的类似,比如从 0 循环到 4:

for i := 0; i < 5; i++ {
fmt.Printf("i:%v\n", i)
}

2. for-range 循环

for-range 循环可用于数组、切片、字符串、map 等可迭代对象,循环的参数又两个,分别是索引和对应的元素。

这里逐个介绍其示例:

1) 数组/切片

数组或者切片的示例如下:

s := []string{"a", "b", "c"}
for index, value := range s {
fmt.Printf("index: %v, value: %v\n", index, value)
}

前面的 index 是索引下标,value 是下标对应的值。

如果不需要 index 或者 value,直接置为 "_" 即可:

s := []string{"a", "b", "c"}
for _, value := range s {
fmt.Printf("value: %v\n", value)
}
2) 字符串

对字符串是用 for-range 返回的索引是字节索引:

s := "hello world"
for index, char := range s {
fmt.Printf("index:%d, char:%c\n", index, char)
}

而如果字符串中包含中文,Go 能够将其自动解码,且返回中文字符开始的字节索引位置:

s2 := "hello 世界"
for index, char := range s2 {
fmt.Printf("index:%d, char:%c\n", index, char)
}
3) map

对 map 使用 for-range 操作会迭代其 key-value:

m := map[string]int{
"a": 1,
"b": 4,
"c": 2,
} for k, v := range m {
fmt.Printf("k:%s, v:%d\n", k, v)
}

3. 无限循环

对于前面的 for 循环,如果我们不设置任何条件,就可以实现一个无限循环,可以在内部通过 continue 和 break 来控制进入下一次循环或者退出循环。

以下是一个示例:

i := 0
for {
i++
if i%2 == 0 {
fmt.Println("i 是偶数", i)
continue
} if i == 5 {
fmt.Println("i = 5, 退出循环")
break
}
}

Golang基础笔记六之流程控制的更多相关文章

  1. Java笔记(六)……程序流程控制

    判断结构 三种结构: 1: if(条件表达式) 2: { 3: 执行语句; 4: } 5:  6: if(条件表达式) 7: { 8: 执行语句; 9: } 10: else 11: { 12: 执行 ...

  2. iOS开发Swift篇—(六)流程控制

    iOS开发Swift篇—(六)流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注意:这 ...

  3. Java04-Java语法基础(三)流程控制

    Java04-Java语法基础(三)流程控制 一.数据类型的转换 1.自动转换:在赋值运算中,占字节数大的类型会自动向字节小的类型转换 double d1 = 3.14; int t1 = d1; 2 ...

  4. 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结

    053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...

  5. 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序

    052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...

  6. 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1

    051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...

  7. 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句

    050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...

  8. 049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句

    049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句 本文知识点:break语句 break语句 break语句前情回顾 1.swi ...

  9. 048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和

    048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例--阶乘的累加和 本文知识点:通过案例练习嵌套循环应用 案例练习--阶乘的累加和 案例题目 ...

  10. 047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用

    047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用 本文知识点:嵌套while循环应用 什么是循环嵌套? 什么是循环嵌套? ...

随机推荐

  1. sql 使用with 递归

     ---前提:有上下级关系的关系表  ---示例:组织架构表 DECLARE @orgId NVARCHAR(20)='0001'; --向下递归,查询@orgId 下的所有结点...包括儿子-孙子节 ...

  2. 通俗易懂分布式事务之2PC、3PC、Seata AT模式、Seata TCC模式

    通俗易懂分布式事务之2PC.3PC.AT.TCC 单机服务事务提交回滚操作是需要拿到Connection对象,调用提交commit方法或者rollback方法回滚的,例如下面操作 Connection ...

  3. 多态的转型和案例--java进阶day02

    1.多态的转型 1.向上转型 我们之前学的多态创建对象,使用的都是向上转型,父类引用指向子类(赋值方式则是从子到父),f拿到子类的地址,就能访问子类的堆内存 2.向下转型 和向上转型相反,子类引用指向 ...

  4. 【Docker】命令行操作

    Docker常用命令 帮助命令 docker version docker info docker --help Docker 客户端 docker 客户端非常简单 ,我们可以直接输入 docker ...

  5. 【电脑】VirtualBox 安装 Win98 写网页

    VirtualBox 安装 Win98 写网页 记录一下,我成功在VirtualBox中安装了Win98系统,并且安装了Dreamweaver 3.0写网页. 零.起因 学校机房的极域电子教室软件不太 ...

  6. ro在xe10.3上的安装

    在学习研究RO. RO9.2.101.1295在xe10.3上安装遇到新问题.记录处理的办法: 没有采用执行exe安装的方法.而是采用复制源代码后编译安装. 1.把生成的bpl.dcp安装到默认目录, ...

  7. Caddy一个强大的web服务器和代理服务器

    什么是Caddy Caddy是一个强大的.可扩展的平台,可以为您的站点.服务和应用程序提供服务,它是用Go编写的.虽然大多数人使用它作为web服务器或代理,但其实他支持更多的功能: Caddy是唯一自 ...

  8. 0x00 语法知识

    目录 C++ STL Vector Pair String Queue Stack Deque Set Map Bitset Algorithm库函数 Reverse Unique Random_sh ...

  9. 字符串匹配究极大招【KMP】:带你一步步从原理到构建

    目录 前言 KMP原理 什么是前缀表 如何构建前缀表 next数组 使用next数组做匹配 实战演练 前言 一文带你了解如何去理解并实现KMP算法.本文用于记录自己的学习过程,同时向大家进行分享相关的 ...

  10. vue2&vue3&小程序简介

    Vue2.Vue3.小程序页面生命周期详解 本篇将对比 Vue2.Vue3 以及小程序页面/组件的生命周期,简单梳理各自特点.差异.新增优化点. Vue2 生命周期 beforeCreate → cr ...