最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang return省略用法說明

 更新時間:2020年12月16日 09:05:33   作者:david___  
這篇文章主要介紹了golang return省略用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

golang函數(shù)如果返回值定義了變量,return后邊必須跟著表達式或者值

func main() {
 fmt.Println("-------", test())
}
func test() (n string) {
 n = "hello"
 return
}

如果沒有定義變量,return必須顯示地返回對象

func main() {
 fmt.Println("-------", test())
}
func test() string {
 n := "hello"
 return n
}

補充:Golang中defer、return、返回值之間執(zhí)行順序的坑

Go語言中延遲函數(shù)defer充當著 cry...catch 的重任,使用起來也非常簡便,然而在實際應用中,很多gopher并沒有真正搞明白defer、return和返回值之間的執(zhí)行順序,從而掉進坑中,今天我們就來揭開它的神秘面紗!

先來運行下面兩段代碼:

A. 無名返回值的情況

package main 
import (
 "fmt"
)
 
func main() {
 fmt.Println("return:", a()) // 打印結(jié)果為 return: 0
}
 
func a() int {
 var i int
 defer func() {
 i++
 fmt.Println("defer2:", i) // 打印結(jié)果為 defer: 2
 }()
 defer func() {
 i++
 fmt.Println("defer1:", i) // 打印結(jié)果為 defer: 1
 }()
 return i
}<br><br>

B. 有名返回值的情況

package main
 
import (
 "fmt"
)
 
func main() {
 fmt.Println("return:", b()) // 打印結(jié)果為 return: 2
}
 
func b() (i int) {
 defer func() {
 i++
 fmt.Println("defer2:", i) // 打印結(jié)果為 defer: 2
 }()
 defer func() {
 i++
 fmt.Println("defer1:", i) // 打印結(jié)果為 defer: 1
 }()
 return i // 或者直接 return 效果相同
}

先來假設(shè)出結(jié)論,幫助大家理解原因:

1、多個defer的執(zhí)行順序為“后進先出”;

2、defer、return、返回值三者的執(zhí)行邏輯應該是:return最先執(zhí)行,return負責將結(jié)果寫入返回值中;接著defer開始執(zhí)行一些收尾工作;最后函數(shù)攜帶當前返回值退出。

如何解釋兩種結(jié)果的不同:

上面兩段代碼的返回結(jié)果之所以不同,其實從上面第2條結(jié)論很好理解。

a()int 函數(shù)的返回值沒有被提前聲名,其值來自于其他變量的賦值,而defer中修改的也是其他變量,而非返回值本身,因此函數(shù)退出時返回值并沒有被改變。

b()(i int) 函數(shù)的返回值被提前聲名,也就意味著defer中是可以調(diào)用到真實返回值的,因此defer在return賦值返回值 i 之后,再一次地修改了 i 的值,最終函數(shù)退出后的返回值才會是defer修改過的值。

C. 下面我們再來看第三個例子,驗證上面的結(jié)論:

package main 
import (
 "fmt"
)
 
func main() {
 fmt.Println("c return:", *(c())) // 打印結(jié)果為 c return: 2
}
 
func c() *int {
 var i int
 defer func() {
 i++
 fmt.Println("c defer2:", i) // 打印結(jié)果為 c defer: 2
 }()
 defer func() {
 i++
 fmt.Println("c defer1:", i) // 打印結(jié)果為 c defer: 1
 }()
 return &i
}

雖然 c()*int 的返回值沒有被提前聲明,但是由于 c()*int 的返回值是指針變量,那么在return將變量 i 的地址賦給返回值后,defer再次修改了 i 在內(nèi)存中的實際值,因此函數(shù)退出時返回值雖然依舊是原來的指針地址,但是其指向的內(nèi)存實際值已經(jīng)被成功修改了。

即,我們假設(shè)的結(jié)論是正確的!

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 盤點總結(jié)2023年Go并發(fā)庫有哪些變化

    盤點總結(jié)2023年Go并發(fā)庫有哪些變化

    這篇文章主要為大家介紹了2023年Go并發(fā)庫的變化盤點總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • golang如何實現(xiàn)抓取IP地址的蜘蛛程序詳解

    golang如何實現(xiàn)抓取IP地址的蜘蛛程序詳解

    這篇文章主要給大家介紹了關(guān)于利用golang如何實現(xiàn)抓取IP地址的蜘蛛程序的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07
  • go語言interface接口繼承多態(tài)示例及定義解析

    go語言interface接口繼承多態(tài)示例及定義解析

    這篇文章主要為大家介紹了go語言interface接口繼承多態(tài)示例及定義解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Go語言輕量級高性能嵌入式規(guī)則引擎RuleGo使用詳解

    Go語言輕量級高性能嵌入式規(guī)則引擎RuleGo使用詳解

    這篇文章主要為大家介紹了Go語言輕量級高性能嵌入式規(guī)則引擎RuleGo使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Systemd集成Golang二進制程序的方法

    Systemd集成Golang二進制程序的方法

    這篇文章主要介紹了Systemd集成Golang二進制程序的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • vim配置go語言語法高亮問題的解決方法

    vim配置go語言語法高亮問題的解決方法

    vim配置go語言語法高亮的問題已經(jīng)遇到過好幾次了,每次都是找不到答案,今天小編給大家?guī)砹藇im配置go語言語法高亮問題的解決方法,感興趣的朋友一起看看吧
    2018-01-01
  • Go?代碼塊作用域變量遮蔽問題解析

    Go?代碼塊作用域變量遮蔽問題解析

    這篇文章主要為大家介紹了Go?代碼塊作用域變量遮蔽問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • GoFrame基于性能測試得知grpool使用場景

    GoFrame基于性能測試得知grpool使用場景

    這篇文章主要為大家介紹了GoFrame基于性能測試得知grpool使用場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 一文詳解如何在Golang中實現(xiàn)JWT認證與授權(quán)

    一文詳解如何在Golang中實現(xiàn)JWT認證與授權(quán)

    在現(xiàn)代Web應用中,安全性是一個非常重要的課題,JWT作為一種常用的認證與授權(quán)機制,已被廣泛應用于各種系統(tǒng)中,下面我們就來看看如何在Golang中實現(xiàn)JWT認證與授權(quán)吧
    2025-03-03
  • 輕松入門:使用Golang開發(fā)跨平臺GUI應用

    輕松入門:使用Golang開發(fā)跨平臺GUI應用

    Golang是一種強大的編程語言,它的并發(fā)性和高性能使其成為開發(fā)GUI桌面應用的理想選擇,Golang提供了豐富的標準庫和第三方庫,可以輕松地創(chuàng)建跨平臺的GUI應用程序,通過使用Golang的GUI庫,開發(fā)人員可以快速構(gòu)建具有豐富用戶界面和交互功能的應用程序,需要的朋友可以參考下
    2023-10-10

最新評論

财经| 龙海市| 衡阳市| 高安市| 万载县| 白山市| 台前县| 荃湾区| 博客| 丰原市| 凌海市| 岱山县| 攀枝花市| 绥阳县| 灵武市| 兰坪| 湛江市| 漳平市| 高阳县| 海原县| 松桃| 九江县| 噶尔县| 鄂伦春自治旗| 阳东县| 柳林县| 襄樊市| 陆川县| 云南省| 荥经县| 罗平县| 左贡县| 洛隆县| 连平县| 曲阜市| 昆明市| 科技| 上高县| 彭水| 富阳市| 齐齐哈尔市|