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)

打印结果:

Go语言pointer及switch fallthrough实战详解

查询内存地址的类型

p := &n
// 根据地址取值
fmt.Printf("%T\n", p) // 打印结果是*int,即int类型的指针
m := *p
fmt.Println(m) //根据地址取值

打印结果:

Go语言pointer及switch fallthrough实战详解

我们发现打印的结果是:*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

打印结果:

Go语言pointer及switch fallthrough实战详解

小结

  • 对变量进行取地址操作(&),可以获得这个变量的指针变量

  • 指针变量的值是指针地址(内存地址)

  • 对指针变量进行取值操作(*),可以获得这个指针变量指向原变量的值,即通过内存地址取值。

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后面不需要传入参数,否则会报错:类型不匹配。

Go语言pointer及switch fallthrough实战详解

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
  • asp之家 网络编程 m.aspxhome.com