Golang中defer和return順序

在Golang中,deferreturn 的執行順序是一個重要的特性,它們的執行順序如下:

  1. return語句不是一條單獨的語句,實際上,它是由賦值和返回兩部分組成的。賦值步驟會先執行,這一步會計算return語句中的表達式,然后賦值給返回值。
  2. defer語句在函數返回前(即return語句后的返回動作執行前)執行。如果有多個defer語句,那么它們會以LIFO(后進先出,即棧)的順序執行。
  3. 返回動作,這是return語句的第二部分,這一步會攜帶返回值返回到調用函數。

所以,如果你在一個函數中寫入了deferreturn,那么它們的執行順序是:先執行return語句的賦值部分,然后執行defer語句,最后執行return語句的返回動作。

package mainimport "fmt"func foo() (result int) {defer func() {// 修改返回值result++}()return 0 // return語句的賦值部分先執行,然后執行defer,最后執行return的返回動作
}func main() {fmt.Println("Final result:", foo())
}

輸出結果為:

在這里插入圖片描述

在這個例子中,函數foo會返回1,而不是0。因為return 0是先賦值result0,然后defer函數把result增加了1,最后返回result,所以返回值是1

最后給大家推薦一個LinuxC/C++高級架構系統教程的學習資源與課程,可以幫助你有方向、更細致地學習C/C++后端開發,具體內容請見 https://xxetb.xetslk.com/s/1o04uB

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43786.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux安裝Docker以及Docker Componse

一、安裝前準備工作 1.1 查看服務器系統版本以及內核版本 cat /etc/redhat-release 1.2 查看服務器內核版本 uname -r這里我們使用的是CentOS 7.4 系統,內核版本為3.10 1.3 安裝依賴包 yum install -y yum-utils device-mapper-persistent-data lvm21.4 設置…

賽氪網受邀出席浙江省應用數學研究會,共啟數學教育與競賽新篇章

2024年7月5日,浙江省應用數學研究會在風景如畫的嘉興市成功舉辦了2024年學術研討會暨第七屆第六次理事會工作會議的首日活動。作為技術支持單位,賽氪網受邀參與此次盛會,彰顯了其在數學教育及競賽領域的深厚實力與積極貢獻。 開幕式由嘉興大學…

linux watchdog 子系統

目錄 一、watchdog 子系統二、關鍵數據結構2.1 watchdog_device2.2 watchdog_ops2.3 watchdog_info 三、重要流程3.1 watchdog 初始化3.2 watchdog 設備注冊3.3 watchdog 設備文件操作函數3.4 watchdog 喂狗用戶空間 watchdog(busybox)內核空間喂狗疑問 …

生成隨機密碼

生成8位無重復的密碼(可以包含數字、大小寫字母) import random import string character string.digits string.ascii_letters password .join(random.sample(character, 8)) print(f"生成的隨機密碼為:{password}")

rushAWD使用說明

rushAWD使用說明 檢查單 先開個坑,慢慢填 檢查單 af 配置項用途值conf.yaml總配置項靶機名:靶機IP

如何快速實現一個無縫輪播效果

🧑?💻 寫在開頭 點贊 收藏 學會🤣🤣🤣 需求簡介 輪播圖是我們前端開發中的一個常見需求,在項目開發中,我們可以使用element、ant等UI庫實現。某些場景,為了一個簡單的功能安裝一…

IDEA新建項目并撰寫Java代碼的方法

本文介紹在IntelliJ IDEA軟件中,新建項目或打開已有項目,并撰寫Java代碼的具體方法;Groovy等語言的代碼也可以基于這種方法來撰寫。 在之前的文章IntelliJ IDEA社區版在Windows電腦中的下載、安裝方法(https://blog.csdn.net/zheb…

35.搜索插入位置

題目描述 給定一個排序數組和一個目標值,在數組中找到目標值,并返回其索引。如果目標值不存在于數組中,返回它將會被按順序插入的位置。 請必須使用時間復雜度為 O(log n) 的算法。 示例 1: 輸入: nums [1,3,5,6], target 5 輸出: 2示例 2:…

在任何崗位都可以把自己當成一個項目經理

這幾天跟一個剛入職場的姐妹交流的時候,她問了我一個問題,如果讓你總結三年從助理升到經理的關鍵點,你覺得是什么?我思考了那么幾秒鐘,大概就是——在任何崗位都把自己當項目經理。 今天給大家介紹我的項目管理工具——…

解析Spring Boot中的數據遷移工具

解析Spring Boot中的數據遷移工具 大家好,我是微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 1. 數據遷移工具的重要性和選擇 在開發和維護現代化應用程序時,數據遷移是一個關鍵的任務。Spring Bo…

頭歌資源庫(21)走方格

一、 問題描述 二、算法思想 首先,確定方格中間下方人所在的位置,即(row, col) (n//2, m//2)。初始化路徑和為0。從初始位置開始,按照給定的5個方向進行移動:上(U),下(D),左(L),右(R)&#x…

關于騰訊的那些事(6月新聞紀要)

祝賀!深圳市科技進步一等獎 這份文件是關于騰訊云數據庫TDSQL獲得深圳市科技進步一等獎的詳細報道。以下是詳細總結分析: 獲獎榮譽: 騰訊云數據庫TDSQL榮獲2022年深圳市科技進步一等獎,成為唯一入選的數據庫產品。該獎項由深圳市…

菜雞的原地踏步史05(???)

每日一念 改掉自己想到哪寫哪的壞習慣 子串 和為K的子數組 class Solution {/**有點像找出和為0的子數組,只不過這里和變成了k不太對,嘗試使用雙指針滑動窗口,完全過不去樣例正確做法hashmap存放 sum -- count對nums中的數字進行遍歷sum累…

C#與物聯網:打造智能家居解決方案

引言 隨著物聯網(IoT)的快速發展,智能家居成為了現代生活的一個重要組成部分。智能家居系統通過連接各種智能設備,如智能燈光、恒溫器、安防攝像頭等,實現家居環境的自動化和智能化控制。C#作為一種強大的編程語言&am…

Linux C++ 045-設計模式之工廠模式

Linux C 045-設計模式之工廠模式 本節關鍵字:Linux、C、設計模式、簡單工廠模式、工廠方法模式、抽象工廠模式 相關庫函數: 簡單工廠模式 基本簡介 從設計模式的類型上來說,簡單工廠模式是屬于創建型模式,又叫做靜態工廠方法&…

10、Python之寫出更加Pythonic的代碼:unpacking拆包機制

引言 有些小伙伴有其他編程語言的學習、使用的經驗,然后遷移到Python。一般會比完全的新手小白,更快速地把Python用起來。這是他們的優勢,但也是他們的劣勢。 之所以這么說,是因為從其他編程語言帶過來的,除了相通的編…

MOJO語言中的字典和哈希表:數據結構的靈活性與效率

MOJO是一種編程語言,它以其獨特的語法和對現代編程范式的支持而聞名。在MOJO中,字典(也稱為哈希表或散列表)是一種非常重要的數據結構,它允許開發者以鍵值對的形式存儲和檢索數據。本文將深入探討MOJO語言中的字典和哈…

第十八節 LLaVA如何按需構建LORA訓練(視覺、語言、映射多個組合訓練)

文章目錄 前言一、基于llava源碼構建新的參數1、添加lora_vit參數2、訓練命令腳本設置二、修改源碼,構建lora訓練1、修改源碼-lora訓練2、LLM模型lora加載3、VIT模型加載4、權重凍結操作5、結果顯示三、實驗結果前言 如果看了我前面文章,想必你基本對整個代碼有了更深認識。…

Raylib 實現超大地圖放大縮小與兩種模式瓦片地圖刷新

原理: 一種刷新模式: 在宮格內整體刷新,類似九宮格移動到邊緣,則九宮格整體平移一個宮格,不過這里是移動一個瓦片像素,實際上就是全屏刷新,這個上限是 筆記本 3060 70幀 100*100個瓦片每幀都…

數據庫之MQL

1,查詢所有 mysql> select * from grade;2, mysql> select id,firstname,lastname from grade;3, mysql> select firstname,lastname from grade where id > 4;4, mysql> select * from grade where sex f;5&…