广告
返回顶部
首页 > 资讯 > 精选 >Go语言中defer语句怎么使用
  • 519
分享到

Go语言中defer语句怎么使用

2023-07-02 18:07:00 519人浏览 独家记忆
摘要

今天小编给大家分享一下Go语言中defer语句怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.在一个函数内的def

今天小编给大家分享一下Go语言中defer语句怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1.在一个函数内的defer执行顺序是先写的后执行,后写的先执行(遵循栈结构)

func DeferTest1(){   defer fmt.Println("我是 defer1")   defer fmt.Println("我是 defer2")   fmt.Println("我是DeferTest1")   fmt.Println("我是DeferTest2")}

结果:

我是DeferTest1
我是DeferTest2
我是 defer2
我是 defer1

2.defer 执行语句的值和定义defer语句函数的关系

func DeferTest2(){   i:= 0   defer fmt.Printf("defer i=%d\t",i)   for ;i<=10;i++{      fmt.Printf("i=%d\t",i)   }   fmt.Println()}

执行结果

i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10   
defer i=0

3.defer的原理

首先看下defer和return语句的区别,如下

Go语言中defer语句怎么使用

可以看到 return 执行的时候 将结果x赋值给了返回值,然后执行了RET指令,而defer语句执行的时候,是在RET指令之前。所以这里注意一下。返回值和x的关系。如果x是一个值类型,这里是进行了拷贝的。可以看下下面几个例子:

func defer1() int {  x := 1  defer func() {   x++<br data-filtered="filtered">  }()  return x}

func defer2() (x int) {  defer func() {    x++  }()  return 1}

func defer3() (y int) {  x := 1  defer func() {    x++  }()  return x}

func defer4() (x int) {  defer func(x int) {    x++    }(x)    return 1}

分别打印这几个方法的结果,返回值分别如下:

defer1: 1
defer2: 2
defer3: 1
defer4: 1

根据上面图上的解释:

  • ①defer执行之前,将x赋值给了返回值(这是一个值拷贝),然后修改x的值,对返回值是无影响的,所以返回的是1

  • ②返回值的名称就是x,此时defer执行前把x赋值为1,然后defer修改x的值, x被增加,故返回的是2

  • ③返回值名称是y,defer执行前,y被赋值为1,defer执行修改x对y无影响,返回也是1

  • ④返回值名称虽然是x,但是defer执行的func是一个带参数的函数,此时传入的参数x是一个值拷贝,作用域是内部,对于外部的x无影响,所以返回的也是1

以上就是“Go语言中defer语句怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: Go语言中defer语句怎么使用

本文链接: https://www.lsjlt.com/news/343774.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言中defer语句怎么使用
    今天小编给大家分享一下Go语言中defer语句怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.在一个函数内的def...
    99+
    2023-07-02
  • Go语言中defer语句的用法
    可以用作一些资源的释放。 1.在一个函数内的defer执行顺序是先写的后执行,后写的先执行(遵循栈结构) func DeferTest1(){ defer fmt.Printl...
    99+
    2022-11-13
  • GO语言延迟函数defer怎么使用
    今天小编给大家分享一下GO语言延迟函数defer怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。go语言中defer最...
    99+
    2023-07-05
  • Go语言之Switch语句怎么使用
    这篇“Go语言之Switch语句怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言之Switch语句怎么使用”文...
    99+
    2023-07-02
  • Go语言中的条件语句怎么使用
    这篇文章主要介绍“Go语言中的条件语句怎么使用”,在日常操作中,相信很多人在Go语言中的条件语句怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言中的条件语句怎么使用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • Go语言的条件语句怎么使用
    本篇内容主要讲解“Go语言的条件语句怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言的条件语句怎么使用”吧!1、if...else判断语法语法的使用和其他语言没啥区别。样例代码如下...
    99+
    2023-06-30
  • Go语言break停止语句怎么使用
    这篇文章主要介绍“Go语言break停止语句怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言break停止语句怎么使用”文章能帮助大家解决问题。在Go语言中,break停止语句用于循环...
    99+
    2023-07-05
  • Go语言break跳转语句怎么使用
    目录基本介绍基本语法示意图细节说明案例基本介绍 break语句用于终止某个语句块的执行,用于中断当前for循环或跳出switch语句 基本语法 { .......... break ...
    99+
    2023-01-16
    Go break Go跳转语句
  • go语言的跳转语句怎么使用
    这篇文章主要介绍“go语言的跳转语句怎么使用”,在日常操作中,相信很多人在go语言的跳转语句怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go语言的跳转语句怎么使用”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-04
  • go语言中的defer关键字
    我是谁 defer - 顾名思义翻译过来叫 延迟, 所以我们通常称呼 defer func() 这样 defer 后面紧跟...
    99+
    2022-11-11
  • Go语言中for循环语句怎么用
    这篇文章主要介绍了Go语言中for循环语句怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。概述for循环是一个循环控制结构,可以执行指定次数的循环语法第一种for&nbs...
    99+
    2023-06-25
  • go语言中的return语句
    目录1、基本语法和说明2、函数的递归调用2.1基本介绍2.2递归调用入门3、总结1、基本语法和说明 在 Go 语言 中,跳转控制语句除了有 goto&n...
    99+
    2022-11-13
  • GO语言中defer实现原理是什么
    这篇文章主要介绍“GO语言中defer实现原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“GO语言中defer实现原理是什么”文章能帮助大家解决问题。defer 是什么咱们一起来看看 def...
    99+
    2023-07-05
  • c语言中printf语句怎么使用
    在C语言中,printf语句用于打印输出到控制台。它的基本语法如下:```cprintf("格式控制字符串", 参数列表);```其...
    99+
    2023-09-15
    C语言
  • c语言中goto语句怎么使用
    这篇文章主要介绍“c语言中goto语句怎么使用”,在日常操作中,相信很多人在c语言中goto语句怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c语言中goto语句怎么使用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-04
  • 一文搞懂Go语言中defer关键字的使用
    目录前言defer是什么多个defer的执行顺序延迟函数的参数在defer声明时就决定了defer和return的顺序defer和panicdefer下的函数参数包含子函数总结前言 ...
    99+
    2022-11-11
  • Go语言学习之Switch语句的使用
    目录基本语法fallthrough使用方法多条件匹配判断接口(interface)类型空接口获取实际类型基本语法 在讲述if-else时已经提到,如果有多个判断条件,Go语言中提供了...
    99+
    2022-11-13
  • Go语言的循环语句如何使用
    这篇文章主要介绍“Go语言的循环语句如何使用”,在日常操作中,相信很多人在Go语言的循环语句如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言的循环语句如何使用”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-30
  • C语言case语句怎么使用
    C语言的switch语句中,case语句用于匹配不同的值,执行相应的代码块。以下是case语句的使用方法:1. switch语句必须...
    99+
    2023-05-30
    case语句 case
  • c语言goto语句怎么使用
    C语言中的goto语句用于无条件地转移到程序中的标记位置。它的使用方式如下:1. 在程序中标记位置,语法为:```label:```...
    99+
    2023-08-26
    c语言 goto
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作