您的位置:首页 > 教程 > 其他脚本 > Go语言pointer及switch fallthrough实战详解

Go语言pointer及switch fallthrough实战详解

2022-06-17 11:10:59 来源:易采站长站 作者:

Go语言pointer及switch fallthrough实战详解

前言

今天继续为大家更新Go语言学习记录的文章。up2站长之家-易采站长站-Easck.Com

首先说明pointer指针switch是两个并没有直接关系的知识点,放在一篇文章中将的原因是,这两个知识点在学习和使用的过程中往往被大家忽视。up2站长之家-易采站长站-Easck.Com

pointer

go语言不存在指针操作,只有2个符号:>

应用

n := 18
// 取地址
fmt.Println(&n)
fmt.Println(*&n)

打印结果:up2站长之家-易采站长站-Easck.Com

up2站长之家-易采站长站-Easck.Com

查询内存地址的类型

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

打印结果:up2站长之家-易采站长站-Easck.Com

up2站长之家-易采站长站-Easck.Com

我们发现打印的结果是:*int,即int类型的指针up2站长之家-易采站长站-Easck.Com

nil>
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

打印结果:up2站长之家-易采站长站-Easck.Com

up2站长之家-易采站长站-Easck.Com

小结

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

    switch

    我们往往习惯于使用if判断,switch可以简化我们的if判断。up2站长之家-易采站长站-Easck.Com

    switch的作用和if是一样的,都是进行条件判断,引入switch的原因是能简化我们的if判断,让代码的可读性更强。up2站长之家-易采站长站-Easck.Com

    可读性更好

    举个栗子:up2站长之家-易采站长站-Easck.Com

    if判断来判断手指的名称:up2站长之家-易采站长站-Easck.Com

    finger :=2
    if finger==1 {
       fmt.Println("大拇指")
    }else if finger==2 {
       fmt.Println("食指")
    }else if finger==5 {
       fmt.Println("小拇指")
    }else {
       fmt.Println("无效")
    }
    

    switch判断手指名称up2站长之家-易采站长站-Easck.Com

    finger := 2
    switch finger {
    case 1:
       fmt.Println("大拇指")
    case 2:
       fmt.Println("食指")
    case 5:
       fmt.Println("小拇指")
    default:
       fmt.Println("无效")
    }
    

    对比之下立竿剪影:switch case 这种方式可读性更好。up2站长之家-易采站长站-Easck.Com

    case后支持多个参数

    举个栗子:奇偶数判断up2站长之家-易采站长站-Easck.Com

    switch n := 3; n {
    case 1, 3, 5, 7, 9:
       fmt.Println("奇数")
    case 2, 4, 6, 8, 10:
       fmt.Println("偶数")
    }
    

    case后加判断

    举个栗子:up2站长之家-易采站长站-Easck.Com

    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后面不需要传入参数,否则会报错:类型不匹配。up2站长之家-易采站长站-Easck.Com

    up2站长之家-易采站长站-Easck.Com

    fallthrough

    使用建议

    在一个>

    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语言中的指针有了更深刻的理解up2站长之家-易采站长站-Easck.Com

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

    以上就是Go语言pointer及switch>

    如有侵权,请联系QQ:279390809 电话:15144810328

相关文章

  • 使用Go基于WebSocket构建千万级视频直播弹幕系统的代码详解

    使用Go基于WebSocket构建千万级视频直播弹幕系统的代码详解

    (1)业务复杂度介绍 开门见山,假设一个直播间同时500W人在线,那么1秒钟1000条弹幕,那么弹幕系统的推送频率就是: 500W * 1000条/秒=50亿条/秒 ,想想B站2019跨年晚会那次弹幕系统得是
    2020-07-08
  • golang中import cycle not allowed解决的一种思路

    golang中import cycle not allowed解决的一种思路

    发现问题 项目中碰到了一些问题,使用了指针函数的思路来解决相应问题 在实际项目中,因为两个项目互相引了对方的一些方法,导致了循环引用的错误,原本可以使用http的请求来解
    2019-11-10
  • 从go语言中找&和*区别详解

    从go语言中找&和*区别详解

    *和的区别 : 是取地址符号 , 即取得某个变量的地址 , 如 ; a*是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值 . 从
    2020-06-23
  • Go语言中利用http发起Get和Post请求的方法示例

    Go语言中利用http发起Get和Post请求的方法示例

    关于 HTTP 协议 HTTP(即超文本传输协议)是现代网络中最常见和常用的协议之一,设计它的目的是保证客户机和服务器之间的通信。 HTTP 的工作方式是客户机与服务器之间的 “请求-应答
    2019-11-10
  • golang如何实现mapreduce单进程版本详解

    golang如何实现mapreduce单进程版本详解

    前言 MapReduce作为hadoop的编程框架,是工程师最常接触的部分,也是除去了网络环境和集群配 置之外对整个Job执行效率影响很大的部分,所以很有必要深入了解整个过程。元旦放假的第一天
    2019-11-10
  • Go打包二进制文件的实现

    Go打包二进制文件的实现

    背景 众所周知,go语言可打包成目标平台二进制文件是其一大优势,如此go项目在服务器不需要配置go环境和依赖就可跑起来。 操作 需求:打包部署到centos7 笔者打包环境:mac os 方法:
    2020-03-11
  • GO语言实现简单的目录复制功能

    GO语言实现简单的目录复制功能

    本文实例讲述了GO语言实现简单的目录复制功能。分享给大家供大家参考。具体实现方法如下: 创建一个独立的 goroutine 遍历文件,主进程负责写入数据。程序会复制空目录,也可以设
    2019-11-10
  • golang中定时器cpu使用率高的现象详析

    golang中定时器cpu使用率高的现象详析

    前言: 废话少说,上线一个用golang写的高频的任务派发系统,上线跑着很稳定,但有个缺点就是当没有任务的时候,cpu的消耗也在几个百分点。 平均值在3%左右的cpu使用率。你没有任务
    2019-11-10