• go语言教程4:switch和map


    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))
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    运行结果如下

    >go run switch.go
    100分的等级是: S
    85分的等级是: B
    62分的等级是: C
    45分的等级是: E
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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" )
    			fallthrough
    		default:
    			fmt.Println("滚\n" )
    	}
    }
    
    func main(){
    	switchTest("S")
    	switchTest("D")
    	switchTest("E")
    	switchTest("A")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    其中,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)
    
    • 1
    • 2

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

    func mapTest(g string){
    	mp := map[string]string{
    		"S": "牛逼!", "A": "优秀",
    		"B": "良好",  "C": "及格",
    		"D": "不及格",
    		"E": "滚",
    	}
    	fmt.Println(g, mp[g])
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    在这里插入图片描述

  • 相关阅读:
    白嫖阿里云服务器,速看!数量不多
    命令行启动android模拟器
    2023年中国稻谷加工机械分类、市场规模及发展前景分析[图]
    跨平台Markdown编辑软件Typora mac中文版功能介绍
    【测试开发面试】6家企业真实面试,最终成功入职外企......
    axios基本使用
    Python爬虫eval混淆,爬虫进阶实战系列
    《双重冲击》读书笔记
    分页存储逻辑地址转物理地址
    javaweb JAVA JSP销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上在线销售
  • 原文地址:https://blog.csdn.net/m0_37816922/article/details/133376983