go语言教程4:switch和map

文章目录

    • switch
    • switch匹配
    • 字典

go语言教程:安装入门➡️for循环➡️数组、切片和指针

switch和map,一个是控制流,一个是数据结构,之所以把两个不同类型的知识点放在一起讲解,是因为二者有着极其相似的运行逻辑,很多时候用于解决相似的问题。

switch

switch是C语言中就有的关键字,可匹配判定条件,并执行相关代码。而在go语言中,switch的功能得到了强化,首先可以作为if...else的替代品,示例如下

//switch.go
package main
import "fmt"func getGrade(n int)string{switch{case n == 100: return "S"case n >= 90 : return "A"case n >= 80 : return "B"case n >= 60 : return "C"case n >= 50 : return "D"default: return "E"		}
}func main(){fmt.Println("100分的等级是:", getGrade(100))fmt.Println("85分的等级是:", getGrade(85))fmt.Println("62分的等级是:", getGrade(62))fmt.Println("45分的等级是:", getGrade(45))
}

运行结果如下

>go run switch.go
100分的等级是: S
85分的等级是: B
62分的等级是: C
45分的等级是: E

switch匹配

其次,Go语言也支持类似C语言的switch用法,即匹配输入内容,但在语法上更加简洁,无需在每个case后面添加break。

func switchTest(g string){fmt.Printf("您考了%s,你", g)switch g{case "S": fmt.Println("牛逼!\n")case "A": fmt.Println("优秀\n")case "B": fmt.Println("良好\n")case "C": fmt.Println("及格\n")case "D":fmt.Println("不及格\n" )fallthroughdefault:fmt.Println("滚\n" )}
}func main(){switchTest("S")switchTest("D")switchTest("E")switchTest("A")
}

其中,fallthrough关键字表示,在执行完本条case之后,忽略匹配条件,继续执行下一条命令。所以,如果匹配了D,那么在输出不及格之后,还会输出一个“滚”字。运行结果如下

您考了S,你牛逼!
您考了D,你不及格

您考了E,你滚
您考了A,你优秀

字典

map

如果不考虑falthrough和default这两个功能,那么switch…case的匹配过程是一对一的,大致遵循下表

SABCDE
牛逼优秀良好及格不及格

而这张表,正体现出字典的键值对映射关系,在go语言中,map就是描述键值对映射的数据类型,而创建map的方法,与创建切片一样,也是通过make关键字,其声明方式如下,mp1通过字符串索引整型,mp2则通过字符串索引字符串。

mp1 := make(map[string]int)
mp2 := make(map[string]string)

下面用map来重新实现等级和说明的匹配逻辑

func mapTest(g string){mp := map[string]string{"S": "牛逼!", "A": "优秀","B": "良好",  "C": "及格","D": "不及格","E": "滚",}fmt.Println(g, mp[g])
}

由于在创建时直接对map的内容初始化了,所以并不需要用到make。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/130840.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下安装ffmpeg的详细教程、ffmpeg is not installed

1、下载解压 wget http://www.ffmpeg.org/releases/ffmpeg-6.0.tar.gz tar -zxvf ffmpeg-6.0.tar.gz 2、 进入解压后目录,输入如下命令/usr/local/ffmpeg为自己指定的安装目录 cd ffmpeg-6.0 ./configure --prefix/usr/local/ffmpeg make sudo make install 3、配置变量 v…

神经网络(MLP多层感知器)

分类 神经网络可以分为多种不同的类型,下面列举一些常见的神经网络类型: 前馈神经网络(Feedforward Neural Network):前馈神经网络是最基本的神经网络类型,也是深度学习中最常见的神经网络类型。它由若干个…

IDEA使用模板创建webapp时,web.xml文件版本过低的一种解决方法

创建完成后的web.xml 文件&#xff0c;版本太低 <!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Appl…

Unity设计模式——模板模式

模板方法模式&#xff0c;定义一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板方法使得 子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 Abstract Class 是抽象类&#xff0c;其实也就是一抽象模板&#xff0c;定义并实现了一个模版方法。这…

主从Reactor高并发服务器

文章目录 Reactor模型的典型分类单Reactor单线程单Reactor多线程多Reactor多线程本项目中实现的主从Reactor One Thread One Loop各模型的优点与缺点 项目分解Reactor服务器模块BufferSocketChannelEpollerTimerWheelEventLoopAnyConnectionAcceptorLoopThreadLoopThreadPoolTc…

嵌入式Linux裸机开发(五)中断管理

系列文章目录 文章目录 系列文章目录前言STM32 中断系统IMX6U中断控制8个中断GIC中断控制器GIC介绍中断IDGIC逻辑分块GIC协处理器 中断使能中断优先级 重点代码分析官方SDK函数start.S文件自行编写中断驱动文件 前言 最近在学习中发现&#xff0c;学Linux嵌入式不仅是对Linux的…

c语言终点站--文件操作

前言&#xff1a; 为什么要学习文件操作呢&#xff1f;想要知道这个问题&#xff0c;我们就需要先了解什么是数据的可持久化。 那么什么是数据的可持久化呢&#xff1f;数据的可持久化就是把内存中的数据对象永久的保存在电脑的磁盘文件中&#xff0c;将程序数据在持久状态和…

Three.js如何计算3DObject的2D包围框?

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 在Three.js应用开发中&#xff0c;有时你可能需要为3D场景中的网格绘制2D的包围框&#xff0c;应该怎么做&#xff1f; 朴素的想法是把网格的3D包围框投影到屏幕空间&#xff0c;例如&#xff0c;下图中的绿色框 3D包围框…

LeetCode【84】柱状图中的最大矩形

题目&#xff1a; 思路&#xff1a; https://blog.csdn.net/qq_28468707/article/details/103682528 https://www.jianshu.com/p/2b9a36a548fa 清晰 代码&#xff1a; public int largestRectangleArea(int[] heights) {int[] heightadd new int[heights.length 1];for (i…

php+html+js+ajax实现文件上传

phphtmljsajax实现文件上传 目录 一、表单单文件上传 1、上传页面 2、接受文件上传php 二、表单多文件上传 1、上传页面 2、接受文件上传php 三、表单异步xhr文件上传 1、上传页面 2、接受文件上传php 四、表单异步ajax文件上传 1、上传页面 2、接受文件上传ph…

typora常用偏好设置

启用自动保存 关闭拼写检查 插入图片的设置 将图片保存在当前文件夹内 换行设置 关闭换行符的显示功能

ElementUI增删改的实现及表单验证

文章目录 一、准备二、添加功能2.1 新增添加按钮2.2 添加弹出框2.3 data中添加内容2.4 methods中添加相关方法 三、编辑功能3.1 表格中添加编辑和删除按钮3.2 methods中添加方法3.3 修改methods中clear方法3.4 修改methods中的handleSubmit方法 四、删除书籍功能4.1 往methods的…