跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • golang return defer panic 对返回值的影响
未分類
10 11 月 2020

golang return defer panic 对返回值的影响

golang return defer panic 对返回值的影响

資深大佬 : xmge 3

package main  import (  "errors"  "fmt"  "log" )  // return 和 defer panic 关于返回值详解  // return:是把一个变量保存到零时变量,如果函数返回值中申明了变量,这会将结果保存到这个变量中。 // defer:是在 return 后执行的,如果函数返回值中没有申明变量,则 defer 中无法修改返回值,如果函数返回值中有申明变量,则 defer 可以通过修改这个变量来修改返回值 // panic: 如果 panic 则不会执行 return 语句,直接执行 defer 语句,执行 defer 语句,如果 defer 语句没有对变量进行改变,则默认返回返回类型的零值。  func main() {  fmt.Println(test1())  fmt.Println(test2())  fmt.Println(test3()) }  // 函数返回值没有申明变量, // return 时,把 i 保存进了 temp 变量(临时保存变量的地方) // defer 时,把 i 进行了+1,由 2 变为了 3,但是并没有改变 temp 的值,所有结果还是 2 func test1() int {  var i = 1  defer func() {   err := recover()   if err != nil {    log.Println(err)   }   i++  }()   i++  return i }  // 函数返回值没有申明变量, // return 之前有 panic,所以没有执行 return 语句,因此返回值中为 temp=0 (返回类型的默认值) // defer 时,把 i 进行了+1,由 0 变为了 1,但是并没有改变 temp 的值,所有结果还是 0 func test2() int {  var i = 1  defer func() {   err := recover()   if err != nil {    log.Println(err)   }   i++  }()   panic(errors.New("this is panic"))   return ret(i) }  // 函数返回值申明变量了变量 i // return 之前有 panic,所以没有执行 return 语句,因此返回值中为 i=0 (返回类型的默认值) // defer 时,把 i 进行了+1,由 0 变为了 1,此时 i 就是保存返回结果的变零,因此返回结果为 1 func test3() (i int) {  defer func() {   err := recover()   if err != nil {    log.Println(err)   }   i++  }()   panic(errors.New("this is panic"))   return ret(i) }  func ret(i int) int {  fmt.Println("call return function")  i++  return i }   // test1: //  2 // 2020/11/19 17:38:55 this is panic // test2: //  0 // 2020/11/19 17:38:55 this is panic // test3: //  1   

今天刚刚发现这块知识不太熟,大佬们随便看看…

大佬有話說 (0)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具