一文带你熟悉Go语言中的分支结构

 更新时间:2022年11月28日 14:13:37   作者:陈明勇  
这篇文章主要和大家分享一下Go语言中的分支结构(if - else-if - else、switch),文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,需要的可以参考一下

分支结构

分支结构是结构化程序设计中的基础。针对分支结构,Go 提供了两种语句形式,一种是 if,另一种是 switch

if

if 语句是 Go 中最常用、最简单的分支控制结构,它分为单分支、双分支以及多分支三种用法。if 语句会根据布尔变量或布尔表达式,在两个或多个分支中选择一个执行。以下为 if 语句的形式:

if bool_condition {
	// 新分支
}
// 原分支

如果布尔变量或布尔表达式为 true ,则进入新分支执行,否则会继续按照原分支的代码去执行。

单分支 if

单分支的用法,如果布尔表达式成立,则执行新分支的代码,然后继续执行原分支的代码,否则执行原分支的代码,下面是代码示例:

import "fmt"

func main() {
	num := 3
	if num > 2 {
		fmt.Println("num 大于 2")
	}
	fmt.Println("原分支代码")
}

打印结果

num 大于 2
原分支代码

因为 num > 2 因此,程序运行之后,会执行新分支的打印语句以及原分支的打印语句。除了单个布尔表达式以外,还可以加入 &&|| 条件运算符进行条件的组合,例如:

import "fmt"

func main() {
	num := 3
	if num > 2 && num < 10 {
		fmt.Println("num 大于 2 并且 num 小于 10")
	}
	fmt.Println("原分支代码")
}

双分支 if-else

双分支结构,if 配合 else 关键字实现。如果表达式为 true,执行 分支1,否则执行 分支2,然后继续执行 原分支。下面是代码示例:

import "fmt"

func main() {
	age := 18
	if age == 18 {
		fmt.Println("您已满18岁")
	} else {
		fmt.Println("您未满18岁")
	}
	fmt.Println("原分支代码")
}

执行结果:

您已满18岁
原分支代码

age 的值为 18,因此会执行第一个分支的里打印语句,然后继续执行原分支的打印语句。

多分支 if - else if - else

多分支需要在 ifelse 的形式上,加上 else if 进行实现。如果 if 后面的布尔表达式不成立,则会判断 else if 后面的布尔表达式,然后进行分支的选择,下面是代码示例:

import "fmt"

func main() {
	name := "小明"
	if name == "小红" {
		fmt.Println("您好,小红!")
	} else if name == "小明" {
		fmt.Println("您好,小明!")
	} else {
		fmt.Println("您好,陌生人!")
	}
	fmt.Println("原分支代码")
}

执行结果:

您好,小明!
原分支代码

程序根据布尔表达式条件的值,选择了第二个分支去执行代码。

在 if 语句中声明变量

if 语句中,布尔表达式之前声明变量是 Go 语言的惯用法,这种使用方式可以提高代码的可读性。由于是在 if 语句中声明的变量,因此变量的作用域也只在 if 语句中,外部无法访问这些变量。下面是示例:

import "fmt"

func main() {
	mp := map[string]string{"name": "cmy"}

	if name, ok := mp["name"]; ok {
		fmt.Printf("存在 key → name:%s\n", name)
	} else {
		fmt.Println("key 不存在")
	}
	fmt.Println("原分支代码")
}

if 语句中定义 name,ok 变量,使用 ok 判断 key 是否存在,如果存在则执行分支里的代码。

switch

基本用法:

switch T {
case value1:
	// 分支 1
case value2, value3, ...:
	// 分支 2
...
default:
	// 默认分支
}

T 可以是常量、变量和布尔表达式等,case 关键字后面的 value 类型,必须与 T 的类型是一致的,且 value 是唯一的。Go 会根据 T 的值与各个 case 后面的 value 进行匹配,匹配成功则执行对应 case 分支,case 后面可以有多个 value。default 为默认分支,可有可无,如果前面的 case 都没匹配上,则会执行 default 分支。

示例

import "fmt"

func main() {
	name := "小明"
	if name == "小红" {
		fmt.Println("您好,小红!")
	} else if name == "小明" {
		fmt.Println("您好,小明!")
	} else {
		fmt.Println("您好,陌生人!")
	}
	fmt.Println("原分支代码")
}

上面的代码,可以使用 switch 分支改造:

import "fmt"

func main() {
	name := "小明"
	switch name {
	case "小明":
		fmt.Println("您好,小明!")
	case "小红":
		fmt.Println("您好,小红!")
	default:
		fmt.Println("您好,陌生人!")

	}
	fmt.Println("原分支代码")
}

执行结果:

您好,小明!
原分支代码

name 等于 小明,与第一个 case 分支匹配成功,执行这个分支的代码,然后继续执行原分支的代码。

switch 分支当 if 分支使用

switch 分支后面不带常量、变量或布尔表达式等时,其效果与 if 分支类似。

import "fmt"

func main() {
	switch {
	case 1+1 != 2:
		fmt.Println("1 + 1 不等于 2")
	case 1+1 == 2:
		fmt.Println("1 + 1 等于 2")
	default:
		fmt.Println("0")

	}
	fmt.Println("原分支代码")
}

switch 后面什么都没有时,程序会根据 case 后面布尔表达式的值进行分支的选择。

在 switch 语句中声明变量

if 一样,我们也可以在 switch 语句中声明变量,变量的作用域也只在 swtich 语句中,外部无法访问这些变量。

import "fmt"

func main() {
	mp := map[string]string{"name": "cmy"}
	switch name := mp["name"]; name {
	case "cmy":
		fmt.Println("cmy")
	case "kk":
		fmt.Println("kk")
	default:
		fmt.Println("unknown")

	}
	fmt.Println("原分支代码")
}

fallthrough

Go 语言中,不同于其他语言,switch 块内,每个 case 无需声明 break 来终止。如果我们想执行多个 case 分支,可以使用 fallthrough 关键字来实现。

import "fmt"

func main() {
	mp := map[string]string{"name": "cmy"}
	switch name := mp["name"]; name {
	case "cmy":
		fmt.Println("cmy")
		fallthrough
	case "kk":
		fmt.Println("kk")
	default:
		fmt.Println("unknown")

	}
	fmt.Println("原分支代码")
}

执行结果:

cmy
kk
原分支代码

在第一个 case 分支后面使用了 fallthrough,不论下一个 case 是否与 cmy 匹配,都会执行这个分支的代码。

小结

本文对两种分支结构(ifswitch)进行了介绍,也举例说明了一些特殊的用法。如果代码存在着复杂的 if 多分支结构,不妨用 swtich 进行改造,也许代码的可读性会更高。

到此这篇关于一文带你熟悉Go语言中的分支结构的文章就介绍到这了,更多相关Go语言分支结构内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 部署Go语言项目的 N 种方法(小结)

    部署Go语言项目的 N 种方法(小结)

    这篇文章主要介绍了部署Go语言项目的 N 种方法(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 详解Golang如何实现节假日不打扰用户

    详解Golang如何实现节假日不打扰用户

    这篇文章主要为大家介绍了Golang如何实现节假日不打扰用户过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 一文带你搞懂Go如何读写Excel文件

    一文带你搞懂Go如何读写Excel文件

    Excelize是一个用纯Go语言编写的库,提供了一组函数,可以对XLAM / XLSM / XLSX / XLTM / XLTX文件进行读写。支持读写由Microsoft Excel™2007及以后版本生成的电子表格文档。本文就将用它实现读写Excel文件操作,感兴趣的可以学习一下
    2022-11-11
  • 解读golang plugin热更新尝试

    解读golang plugin热更新尝试

    这篇文章主要介绍了解读golang plugin热更新尝试,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 详解Golang中gcache模块的基本使用

    详解Golang中gcache模块的基本使用

    这篇文章主要通过结合商业项目的使用场景,为大家介绍了gcache的基本使用、缓存控制以及淘汰策略。使用gcache做缓存处理,简单方便易上手
    2022-11-11
  • mac下golang安装了windows编译环境后编译变慢

    mac下golang安装了windows编译环境后编译变慢

    这篇文章主要介绍了mac下golang安装了windows编译环境后编译变慢的处理方法,非常的简单,有相同问题的小伙伴可以参考下。
    2015-04-04
  • Go+Lua解决Redis秒杀中库存与超卖问题

    Go+Lua解决Redis秒杀中库存与超卖问题

    本文主要介绍了Go+Lua解决Redis秒杀中库存与超卖问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • go语言reflect.Type 和 reflect.Value 应用示例详解

    go语言reflect.Type 和 reflect.Value 应用示例详解

    这篇文章主要为大家介绍了go语言reflect.Type 和 reflect.Value 应用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Golang多线程下载器实现高效快速地下载大文件

    Golang多线程下载器实现高效快速地下载大文件

    Golang多线程下载器是一种高效、快速地下载大文件的方法。Golang语言天生支持并发和多线程,可以轻松实现多线程下载器的开发。通过使用Golang的协程和通道,可以将下载任务分配到多个线程中并行处理,提高了下载的效率和速度
    2023-05-05
  • 在Colaboratory上运行Go程序的详细过程

    在Colaboratory上运行Go程序的详细过程

    这篇文章主要介绍了在Colaboratory上运行Go程序,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08

最新评论