Go语言pointer及switch fallthrough实战详解
作者:王中阳Go 发布时间:2024-05-09 14:55:07
标签:Go语言,pointer,switch,fallthrough
前言
今天继续为大家更新Go语言学习记录的文章。
首先说明pointer指针
和switch
是两个并没有直接关系的知识点,放在一篇文章中将的原因是,这两个知识点在学习和使用的过程中往往被大家忽视。
pointer
go语言不存在指针操作,只有2个符号: &取内存地址 *根据内存地址取值
应用
n := 18
// 取地址
fmt.Println(&n)
fmt.Println(*&n)
打印结果:
查询内存地址的类型
p := &n
// 根据地址取值
fmt.Printf("%T\n", p) // 打印结果是*int,即int类型的指针
m := *p
fmt.Println(m) //根据地址取值
打印结果:
我们发现打印的结果是:*int,即int类型的指针
nil pointer
var a1 *int //nil pointer
fmt.Println(a1) //<nil>
var a2 = new(int)
fmt.Println(a2) //内存地址 0xc000108010
fmt.Println(*a2) //0 根据内存地址取值 没有值返回0
*a2 = 100 //根据内存地址赋值
fmt.Println(*a2) //100
打印结果:
小结
对变量进行取地址操作(&),可以获得这个变量的指针变量
指针变量的值是指针地址(内存地址)
对指针变量进行取值操作(*),可以获得这个指针变量指向原变量的值,即通过内存地址取值。
switch
我们往往习惯于使用if判断,switch可以简化我们的if判断。
switch的作用和if是一样的,都是进行条件判断,引入switch的原因是能简化我们的if判断,让代码的可读性更强。
可读性更好
举个栗子:
if判断来判断手指的名称:
finger :=2
if finger==1 {
fmt.Println("大拇指")
}else if finger==2 {
fmt.Println("食指")
}else if finger==5 {
fmt.Println("小拇指")
}else {
fmt.Println("无效")
}
switch判断手指名称
finger := 2
switch finger {
case 1:
fmt.Println("大拇指")
case 2:
fmt.Println("食指")
case 5:
fmt.Println("小拇指")
default:
fmt.Println("无效")
}
对比之下立竿剪影:switch case 这种方式可读性更好。
case后支持多个参数
举个栗子:奇偶数判断
switch n := 3; n {
case 1, 3, 5, 7, 9:
fmt.Println("奇数")
case 2, 4, 6, 8, 10:
fmt.Println("偶数")
}
case后加判断
举个栗子:
age := 29
switch {
case age < 18:
fmt.Println("好好学习Z")
case age > 18 && age < 60:
fmt.Println("好好上班")
case age > 60:
fmt.Println("希望不用继续上班了,哈哈")
default:
fmt.Println(age)
}
注意:当在case后加判断时,switch后面不需要传入参数,否则会报错:类型不匹配。
fallthrough
使用建议
在一个 switch 块内,每个 case 无需声明 break 来终止 , 如果想顺序执行使用 fallthrough ;在一个switch块内,都必须包含一个 default 语句并且放在最后,即使它什么代码也没有。
package main
import "fmt"
func main() {
switch {
case false:
fmt.Println("false1")
fallthrough
case true:
fmt.Println("true1")
fallthrough
case false:
fmt.Println("false2")
fallthrough
case true:
fmt.Println("true2")
case false:
fmt.Println("false3")
fallthrough
default:
fmt.Println("default case")
}
}
来源:https://juejin.cn/post/7072502044170387492


猜你喜欢
- 解读数据库的嵌套查询的性能explain 是非常重要的性能查询的工具!!!1、嵌套查询首先大家都知道我们一般不提倡嵌套查询或是join查询原
- 本文实例讲述了Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能。分享给大家供大家参考,具体如下:因为需要使用
- 直角三角形rows = int(input('输入列数:'))for i in range(1, rows):print(&
- 前言JSHint用于分析和验证JavaScript代码是否符合您的编码规则。这个强大的工具可以帮助发现您代码中错误和问题T,它强制你的团队保
- Python产生一个数值范围内的不重复的随机数,可以使用random模块中的random.sample函数,其用法如下:import ran
- 目录一个不那么方便的解决方案:实战演练网站在线转换Postman今天介绍个神奇的网站!堪称爬虫偷懒的神器!我们在写爬虫,构建网络请求的时候,
- Dataframe结构放在numpy来看应该是二维矩阵的形式,每一列是一个特征,上面会有个列标题,每一行是一个样本。对Dataframe结构
- 需要把ip地址转换为10进制数,然后也可以把10进制数转化为ip地址,计算机ping这个十进制数可以ping通对应的ip地址,说明已经实现功
- 我就废话不多说了,大家还是直接看代码吧~# 两个依赖包: sasl&thriftThe easier way I find to i
- 现在就摘录一下sql2005联机丛书里的关于这几个数据类型的解释字符数据类型(nchar 长度固定,nvarchar 长度可变)和 Unic
- 要用ifnull,而不是isnullisnull是判断是否为null,返回值是1表示null或者0表示不为空ifnull等同于oracle的
- 标志是一种简单的工具,就象铁锤,简单实用。如果一种工具功能太多导致其效用减弱,那就让它保持简单。你并不需要一把有太多装饰的精美铁锤。对于象征
- 使用executemany对数据进行批量插入的话,要注意一下事项:#coding:utf8conn = MySQLdb.connect(ho
- Golang 的 1.13 版本 与 1.14 版本对 defer 进行了两次优化,使得 defer 的性能开销在大部分场景下都得到大幅降低
- 1 写在前面1. 本文介绍的是基于TensorFlow tf.estimator接口的深度学习网络,而非TensorFlow&nb
- 一、为什么难 秒杀系统难做的原因:库存只有一份,所有人会在集中的时间读和写这些数据。例如小米手
- 前言Python是一门实现数据可视化很好的语言,他们里面的很多库可以很好的画出图形,形象明了。今天我们就来说说:Pandas数据分析核心支持
- 本文实例讲述了python实现比较两段文本不同之处的方法。分享给大家供大家参考。具体实现方法如下:# find the difference
- 前言:我的python学习也告一段落了。不过有些,方法还是打算总结一下和大家分享。我整理了使用matplotlib绘制折线图的一般步骤,按照
- 本文实例讲述了Python3实现计算两个数组的交集算法。分享给大家供大家参考,具体如下:问题:给定两个数组,写一个方法来计算它们的交集。方案