Go 语言中的 Switch 语句详解

switch语句

使用switch语句来选择要执行的多个代码块中的一个。

在Go中的switch语句类似于C、C++、Java、JavaScript和PHP中的switch语句。不同之处在于它只执行匹配的case,因此不需要使用break语句。

单一case的switch语法

switch 表达式 {
case x:
   // 代码块
case y:
   // 代码块
case z:
   // ...
default:
   // 代码块
}

它的工作方式如下:

  1. 表达式被评估一次。
  2. switch表达式的值与每个case的值进行比较。
  3. 如果匹配,则执行相关的代码块。
  4. 默认关键字是可选的。它指定了如果没有匹配的case时要运行的一些代码。

单一case的switch示例

下面的示例使用星期几的数字来计算星期几的名称:

package main

import (
   "fmt"
)

func main() {
   day := 4

   switch day {
   case 1:
      fmt.Println("星期一")
   case 2:
      fmt.Println("星期二")
   case 3:
      fmt.Println("星期三")
   case 4:
      fmt.Println("星期四")
   case 5:
      fmt.Println("星期五")
   case 6:
      fmt.Println("星期六")
   case 7:
      fmt.Println("星期日")
   }
}

结果:

星期四

default关键字

default关键字指定了在没有匹配的case时要运行的一些代码:

package main

import (
   "fmt"
)

func main() {
   day := 8

   switch day {
   case 1:
      fmt.Println("星期一")
   case 2:
      fmt.Println("星期二")
   case 3:
      fmt.Println("星期三")
   case 4:
      fmt.Println("星期四")
   case 5:
      fmt.Println("星期五")
   case 6:
      fmt.Println("星期六")
   case 7:
      fmt.Println("星期日")
   default:
      fmt.Println("不是工作日")
   }
}

结果:

不是工作日

所有case值应与switch表达式具有相同的类型。否则,编译器将引发错误。

package main

import (
   "fmt"
)

func main() {
   a := 3

   switch a {
   case 1:
      fmt.Println("a是一")
   case "b":
      fmt.Println("a是b")
   }
}

结果:

./prog.go:11:2: 无法将类型为untyped string的"b"用作int类型

多个值的switch语句

在switch语句中,每个case可以有多个值:

语法

switch 表达式 {
case x, y:
   // 代码块(如果表达式的值是x或y)
case v, w:
   // 代码块(如果表达式的值是v或w)
case z:
   // ...
default:
   // 代码块(如果表达式在任何case中都没有找到)
}

多个值的switch示例

下面的示例使用星期几的数字返回不同的文本:

package main

import (
   "fmt"
)

func main() {
   day := 5

   switch day {
   case 1, 3, 5:
      fmt.Println("奇数工作日")
   case 2, 4:
      fmt.Println("偶数工作日")
   case 6, 7:
      fmt.Println("周末")
   default:
      fmt.Println("无效的日期编号")
   }
}

结果:

奇数工作日

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。

看完如果觉得有帮助,欢迎点赞、收藏关注
在这里插入图片描述


http://www.niftyadmin.cn/n/5210710.html

相关文章

SSM个性化旅游管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 个性化旅游管理系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库 ,系统主要采用B…

详细解答T-SNE程序中from sklearn.manifold import TSNE的数据设置,包括输入数据,绘制颜色的参数设置,代码复制可用!!

文章目录 前言——TSNE是t-Distributed Stochastic Neighbor Embedding的缩写1、可运行的T-SNE程序2. 实验结果3、针对上述程序我们详细分析T-SNE的使用方法3.1 加载数据3.2 TSNE降维3.3 绘制点3.4 关于颜色设置,颜色使用的标签数据的说明cy 总结 前言——TSNE是t-D…

dart中使用protobuf

文章目录 为什么要使用protobuf配置环境编写proto描述文件-person.proto编译生成dart文件使用 为什么要使用protobuf protobuf提供了效率、灵活性和易用性之间的平衡,使其成为各种场景(包括微服务、分布式系统和网络通信)中数据序列化和交换的有吸引力的选择 配置环…

数字图像处理基础-用通俗语言进行超详细的总结

目录 图像感知与获取 韦伯定理 马赫带效应 图像获取 图像的采样和量化 图像内插(重采样) 图像的表示与描述 像素间的关系 exercise:4-邻域连通区域标记 本文章讲解数字图像处理的基础,大部分内容来源于课堂笔记中 图像感…

698. 划分为k个相等的子集

698. 划分为k个相等的子集 Java:回溯 class Solution {boolean[] used;int target;private boolean backtracking(int[] nums, int k, int sum, int start) {if (k 0) {return true; // 找到:立即中断栈!并返回值}if (sum target) { // 构…

RevCol:可逆的柱状神经网络

文章目录 摘要1、简介2、方法2.1、Multi-LeVEl ReVERsible Unit2.2、可逆列架构2.2.1、MACRo设计2.2.2、MicRo 设计 2.3、中间监督 3、实验部分3.1、图像分类3.2、目标检测3.3、语义分割3.4、与SOTA基础模型的系统级比较3.5、更多分析实验3.5.1、可逆列架构的性能提升3.5.2、可…

list的总结

目录 1.什么是list 1.1list 的优势和劣势 优势: 劣势: 2.构造函数 2.1 default (1) 2.2 fill (2) 2.3 range (3) 2.4 copy (4) 3.list iterator的使用 3.1. begin() 3.2. end() 3.3迭代器遍历 4. list容量函数 4.1. empty() 4.2. siz…

Centos7 离线安装 CDH7.1.7

1. 安装CDH的准备工作(所有节点都要执行) 1.1 准备环境 角色 IP k8s-master 192.168.181.129 k8s-node1 192.168.181.130 k8s-node2 192.168.181.131 1.2 安装JDK # https://www.oracle.com/java/technologies/downloads/#java11 wget rpm -ivh…