Go语言pointer及switch fallthrough实战详解
作者:王中阳Go 时间:2024-05-09 14:55:07
前言
今天继续为大家更新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
标签:Go语言,pointer,switch,fallthrough
0
投稿
猜你喜欢
MySQL中Multiple primary key defined报错的解决办法
2024-01-13 20:35:14
python实现指定字符串补全空格的方法
2023-06-22 21:57:40
Python学习之Anaconda的使用与配置方法
2023-03-26 00:28:21
python 计算方位角实例(根据两点的坐标计算)
2023-08-01 09:30:54
Google的YSlow——Page Speed(附插件下载)
2009-09-27 12:40:00
浅谈mysql的索引设计原则以及常见索引的区别
2024-01-22 23:58:49
python实现126邮箱发送邮件
2022-07-29 23:37:56
mysql中general_log日志知识点介绍
2024-01-12 23:49:58
django自定义Field实现一个字段存储以逗号分隔的字符串
2021-03-28 16:24:51
如何将自己的python代码发布在pip install给别人使用你知道吗
2022-07-19 20:36:21
Go 实现热重启的详细介绍
2024-04-25 15:06:15
pytorch中的广播语义
2023-04-22 15:16:36
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
2024-06-07 15:22:43
pandas重复行删除操作df.drop_duplicates和df.duplicated的区别
2021-02-13 05:56:36
mysql压缩包版zip安装配置方法
2024-01-17 08:06:01
Django中的session用法详解
2023-01-12 11:40:45
keras读取h5文件load_weights、load代码操作
2023-05-21 18:00:22
MySQL transaction事务安全示例讲解
2024-01-25 17:47:38
python之用Numpy和matplotlib画一个魔方
2022-10-21 16:12:48
sqlserver 查询数据库大小的方法
2012-08-21 10:22:10