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
0
投稿
猜你喜欢
- 目录一、scrapy 分析1. 解析函数或数据入库出错,不会重试,会造成一定的数据丢失2. 运行方式,需借助命令行,不方便调试3. 入库 p
- 本文实例讲述了JavaScript判断前缀、后缀是否是空格的方法。分享给大家供大家参考。具体如下:// Js 判断后缀 String.pro
- DROP PRIMAY DEY用于取消主索引。注释:在MySQL较早的版本中,如果没有主索引,则DROP PRIMARY KEY会取消表中的
- 一、集中式vs分布式1.Subversion属于集中式的版本控制系统集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版
- 设计一个算法,将URL转换成5部分,分别是:schema、netloc、path、query_params、fragment。问题URL的中
- 本文实例为大家分享了pycharm实现猜数游戏的具体代码,供大家参考,具体内容如下1. 设计界面如下所示,利用QTdesigner设计的界面
- 前面写过一篇关于python多线程的实现的文章, 但是效果不是最佳的,写法也不是很好。通过网上学习,也了解到了semaphore这个东西。百
- 本文实例讲述了JS与jQuery判断文本框还剩多少字符可以输入的方法。分享给大家供大家参考,具体如下:javascript部分:functi
- 因为这两天在弄自己的一个问答程序www.sosoask.com ,结果发现开发人员把我的存储过程加密了,郁闷,还好找到解决方法了,现在共享下
- 背景远程服务器是Ubuntu系统,操作中可以使用pycharm在windows或者Ubuntu系统上编辑代码并调试,但是首先需要profes
- SQL Update常见写法Oralce和DB2都支持的语法:update test1?set (test1.name,test1.age)
- 首先想到的就是contains,contains用法如下:select * from students where contains(add
- 通过三种方式给大家介绍,具体详情如下所示:方式一:原理:创建一个新的空字典,用循环的方式来获取列表中的每一个元素,判断获取的元素是否存在字典
- 本文实例讲述了Python基于分水岭算法解决走迷宫游戏。分享给大家供大家参考,具体如下:#Solving maze with morphol
- pytorch的dataloader会将数据传到GPU上,这个过程GPU的mem占用会逐渐增加,为了避免GPUmen被无用的数据占用,可以在
- 本文实例为大家分享了python实现发送邮件功能的具体代码,供大家参考,具体内容如下# -*- coding: utf-8 -*- # Au
- 如何远程注册DLL?试试下面的代码:<% Response.Buffer = True %&g
- 1. 生命周期(重要)1.1 初步认识生命周期别名:生命周期回调函数、生命周期函数、生命周期钩子。生命周期是什么?Vue在关键时刻帮我们调用
- 本文实例为大家分享了微信小程序实现简单计算器与秒表的具体代码,供大家参考,具体内容如下实验内容:任务一:实现一个简单的加减乘除运算。首先输入
- 我们先思考一下,如果需要达到自动化接口测试的效果,那么我们在基本的模拟请求上还需要做哪些呢?以下我粗略概括为 3 个问题(欢迎更多补充与建