首页 > 其他分享 >一文熟悉 Go 的分支结构(if - else-if - else、switch)

一文熟悉 Go 的分支结构(if - else-if - else、switch)

时间:2022-11-28 12:35:41浏览次数:46  
标签:case name fmt else Println switch Go 代码 分支

哈喽大家好,我是陈明勇,今天分享的知识是 Go 的分支结构。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!

耐心和持久胜过激烈和狂热。

分支结构

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

if

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

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

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

单分支 if

一文熟悉 Go 的分支结构(if - else-if - else、switch)_Go

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

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

一文熟悉 Go 的分支结构(if - else-if - else、switch)_分支结构_02

双分支结构,​​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

一文熟悉 Go 的分支结构(if - else-if - else、switch)_分支结构_03

多分支需要在 ​​if​​​ 和 ​​else​​​ 的形式上,加上 ​​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​​ 匹配,都会执行这个分支的代码。

小结

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

标签:case,name,fmt,else,Println,switch,Go,代码,分支
From: https://blog.51cto.com/u_15878295/5889339

相关文章

  • logo制作软件有哪些?这些好用的logo制作软件别错过!​
    logo制作软件有哪些?制作logo相信大家也是知道的,需要专业学过设计的小伙伴们来操作,但是如果我们想自己设计该怎么办呢?不学设计就没办法设计logo了吗?其实小伙伴们只需要借助我......
  • 谢孟军:中国 Go 语言领军人的创业第五年
    Go语言,又称Golang,是一门由Google开发的开源编程语言。Go语言自2009年推出后,因为其简单易学、性能强劲的特点,深受开发者的青睐,使用人数持续增长,还在2016年被评为「T......
  • Django-课程介绍-笔记
    软件框架问题1:什么是软件框架?举个简单的例子,对于一个公司来说,公司中有各个职能部门,每个部门各司其职,通过部门之间的配合来完成工作,这些部门就形成了一个公司的组织架构。从......
  • Django-1.入门-笔记
    本节课是通过Django框架最终完成一个"图书-英雄"信息管理的小例子。目标对使用django框架有一个全面的认识,包括开发流程、基本概念要素,并不针对某个概念知识点详细拆解,后续......
  • Django-1.1搭建环境-笔记
    虚拟环境在开发过程中,当需要使用python的包时可以联网安装sudopip3install包名称使用如上命令,会将包安装到/usr/local/lib/python3.5/dist-packages下。产生的问题如果在......
  • Django-1.2创建项目-笔记
    创建图书管理项目我们以一个电商网站为例,网站上有跟用户有关的页面,有跟商品有关的页面,还有跟订单有关的页面,这样的一块内容其实就是网站的一个功能模块。在django中,项目的组......
  • 使用 Asynq 实现 Go 异步任务处理
    # 1.介绍Asynq是一个Go库,用于对任务进行排队并与工作人员异步处理它们。它的工作原理:客户端将任务放入队列服务器从队列中拉出任务并为每个任务启动一个工作......
  • go slice不同初始化方式性能&数组比较
    go语言开发中,slice是我们常用的数据类型之一,也是因为它的灵活性,自己也很少使用数组,当然我也知道它的一些特性,不过没有真实的去验证它,因为大多数使用场景没必要对code太过苛......
  • 不背锅运维:Grafana的自动登入(Go和Python分别实现)
    1.实现目标想要达到的目标是:当在浏览器向http://192.168.11.254:3090/auto_login这个地址发起GET请求后能够自动登入Grafana2.实现思路需要额外开发一个API处理来自......
  • goioc:一个使用 Go 写的简易的 ioc 框架
    目录goioc介绍快速上手接口介绍使用goioc如何使用生命周期实例化获取对象结构体字段依赖注入Dispose接口反射形式使用goioc如何使用接口、结构体、结构体指针不会自动......