Go语言pointer及switch fallthrough实战详解

 更新时间:2022年06月17日 08:27:06   作者:王中阳Go  
这篇文章主要为大家介绍了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")
    }
}

总结

相信大家阅读完这篇文章对go语言中的指针有了更深刻的理解

至于switch,只要我们心里有这个概念即可:switch作用和if一样,当我们意识到需要写多个if判断时,改用switch实现,往往会是比较好的实践。

以上就是Go语言pointer及switch fallthrough实战详解的详细内容,更多关于Go语言pointer及switch fallthrough的资料请关注脚本之家其它相关文章!

相关文章

  • Golang中for循环遍历避坑指南

    Golang中for循环遍历避坑指南

    这篇文章主要为大家详细介绍了Golang中for循环遍历会出现的一些小坑以及对应的解决办法,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-05-05
  • 详解Go语言如何使用标准库sort对切片进行排序

    详解Go语言如何使用标准库sort对切片进行排序

    Sort 标准库提供了对基本数据类型的切片和自定义类型的切片进行排序的函数。今天主要分享的内容是使用 Go 标准库 sort 对切片进行排序,感兴趣的可以了解一下
    2022-12-12
  • 手把手教你如何在Goland中创建和运行项目

    手把手教你如何在Goland中创建和运行项目

    欢迎来到本指南!我们将手把手地教您在Goland中如何创建、配置并运行项目,通过简单的步骤,您将迅速上手这款强大的集成开发环境(IDE),轻松实现您的编程梦想,让我们一起开启这段精彩的旅程吧!
    2024-02-02
  • Golang多模块开发的详细过程

    Golang多模块开发的详细过程

    这篇文章主要给大家介绍了关于Golang多模块开发的详细过程,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • 一文带你探索Go语言中的函数一等公民

    一文带你探索Go语言中的函数一等公民

    你是否听说过 Go 语言中的函数是一等公民,如果没有,那么恭喜你,本文将带你一起揭开这个神秘的面纱,感兴趣的小伙伴快来和小编一起学习起来吧
    2023-07-07
  • 浅谈一下前端http与https有什么区别

    浅谈一下前端http与https有什么区别

    这篇文章主要介绍了浅谈一下前端http与https有什么区别,现今大部分的网站都已经使用了 https 协议,那么https对比http协议有哪些不同呢,需要的朋友可以参考下
    2023-04-04
  • Go语言panic和recover的用法实例

    Go语言panic和recover的用法实例

    panic()和recover()是Go语言中用于处理错误的两个重要函数,本文主要介绍了Go语言panic和recover的用法实例,panic()用于中止程序并引发panic,而recover()用于捕获panic并恢复程序的执行,感兴趣的可以了解一下
    2024-01-01
  • Go语言中结构体的高级技巧分享

    Go语言中结构体的高级技巧分享

    这篇文章主要为大家分享一下Go语言中结构体的高级技巧,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-08-08
  • Golang内存管理之内存逃逸分析

    Golang内存管理之内存逃逸分析

    逃逸分析是指由编译器决定内存分配的位置,不需要程序员指定,这篇文章主要为大家详细介绍了Golang中内存逃逸分析的几种方法,需要的可以参考一下
    2023-07-07
  • Golang的strings.Split()踩坑记录

    Golang的strings.Split()踩坑记录

    工作中,当我们需要对字符串按照某个字符串切分成字符串数组数时,常用到strings.Split(),本文主要介绍了Golang的strings.Split()踩坑记录,感兴趣的可以了解一下
    2022-05-05

最新评论