本文首发于公众号: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. 接口中的成员特点、类和接口之间的各种关系--java进阶day02

    1.接口的成员特点 1.接口没有构造方法 接口没有构造方法,但是实现类中有构造方法,super()又该访问谁呢? 类实现接口只是认干爹,类本身还是会有亲爹Object,super()会访问Object ...

  2. IE 条件注释

    参考文档 IE6 IE7 IE8 IE9 IE10 Css hack及IE条件注释法 IE的有条件注释判定IE版本详解(附实例代码)

  3. zk源码—5.请求的处理过程

    大纲 1.服务器的请求处理链 (1)Leader服务器的请求处理链 一.PrepRequestProcessor请求预处理器 二.ProposalRequestProcessor事务投票处理器 三.S ...

  4. Python 迭代器和生成器概念

    目录 迭代器的介绍 自定义迭代器 省略的迭代器 生产器的介绍 yield的普通用法 yield的高级用法 yidle的实际应用案例 总结 迭代器的介绍 迭代器的定义: 迭代器(Iterator)是 P ...

  5. P5490 【模板】扫描线 & 矩形面积并 做题笔记

    扫描线是一种很常用的 trick,用来计算矩形并周长.并面积.核心思路是使用标记永久化 + 线段树,直接引用朴素的做法,即从某一维度开始扫描并将经过的面积加和. 错误 upd 函数中的汇总不正确,要想 ...

  6. 🎀Idea插件-arthas idea

    简介 Arthas Idea 是一个为 IntelliJ IDEA 开发的插件,它是为了方便使用 Arthas 这个 Java 诊断工具而设计的.Arthas 是阿里巴巴开源的一款强大的 Java 应 ...

  7. github项目收集

    web模块 Nginx 监控模块vts: https://github.com/vozlt/nginx-module-vts

  8. CV中常用Backbone-2:ConvNeXt模型详解及其代码

    之前介绍了CV常用Backbon: CV中常用Backbone-1:Resnet/Unet/Vit系列/多模态系列等)以及代码 这里介绍新的一个Backbone:ConvNeXt,主要来自两篇比较老的 ...

  9. jdbcTemplate之“rowMapper内部类写法”

    jdbcTemplate的rowMapper内部类写法 String sql ="select sku,feature from product"List<Product&g ...

  10. LR梯度下降法MSE演练

    同步进行一波网上代码搬砖, 先来个入门的线性回归模型训练, 基于梯度下降法来, 优化用 MSE 来做. 理论部分就不讲了, 网上一大堆, 我自己也是理解好多年了, 什么 偏导数, 梯度(多远函数一阶偏 ...