{"id":199873,"date":"2020-11-10T21:00:31","date_gmt":"2020-11-10T13:00:31","guid":{"rendered":"http:\/\/4563.org\/?p=199873"},"modified":"2020-11-10T21:00:31","modified_gmt":"2020-11-10T13:00:31","slug":"golang-return-defer-panic-%e5%af%b9%e8%bf%94%e5%9b%9e%e5%80%bc%e7%9a%84%e5%bd%b1%e5%93%8d","status":"publish","type":"post","link":"http:\/\/4563.org\/?p=199873","title":{"rendered":"golang return defer panic \u5bf9\u8fd4\u56de\u503c\u7684\u5f71\u54cd"},"content":{"rendered":"<div>\n<div>\n<div>\n<h1>                  golang return defer panic \u5bf9\u8fd4\u56de\u503c\u7684\u5f71\u54cd               <\/h1>\n<p> <\/p>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : xmge <\/span>  <span><i><\/i> 3<\/span> <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div isfirst=\"1\"> <\/p>\n<pre><code>package main  import (  \"errors\"  \"fmt\"  \"log\" )  \/\/ return \u548c defer panic \u5173\u4e8e\u8fd4\u56de\u503c\u8be6\u89e3  \/\/ return\uff1a\u662f\u628a\u4e00\u4e2a\u53d8\u91cf\u4fdd\u5b58\u5230\u96f6\u65f6\u53d8\u91cf\uff0c\u5982\u679c\u51fd\u6570\u8fd4\u56de\u503c\u4e2d\u7533\u660e\u4e86\u53d8\u91cf\uff0c\u8fd9\u4f1a\u5c06\u7ed3\u679c\u4fdd\u5b58\u5230\u8fd9\u4e2a\u53d8\u91cf\u4e2d\u3002 \/\/ defer\uff1a\u662f\u5728 return \u540e\u6267\u884c\u7684\uff0c\u5982\u679c\u51fd\u6570\u8fd4\u56de\u503c\u4e2d\u6ca1\u6709\u7533\u660e\u53d8\u91cf\uff0c\u5219 defer \u4e2d\u65e0\u6cd5\u4fee\u6539\u8fd4\u56de\u503c\uff0c\u5982\u679c\u51fd\u6570\u8fd4\u56de\u503c\u4e2d\u6709\u7533\u660e\u53d8\u91cf\uff0c\u5219 defer \u53ef\u4ee5\u901a\u8fc7\u4fee\u6539\u8fd9\u4e2a\u53d8\u91cf\u6765\u4fee\u6539\u8fd4\u56de\u503c \/\/ panic: \u5982\u679c panic \u5219\u4e0d\u4f1a\u6267\u884c return \u8bed\u53e5\uff0c\u76f4\u63a5\u6267\u884c defer \u8bed\u53e5\uff0c\u6267\u884c defer \u8bed\u53e5\uff0c\u5982\u679c defer \u8bed\u53e5\u6ca1\u6709\u5bf9\u53d8\u91cf\u8fdb\u884c\u6539\u53d8\uff0c\u5219\u9ed8\u8ba4\u8fd4\u56de\u8fd4\u56de\u7c7b\u578b\u7684\u96f6\u503c\u3002  func main() {  fmt.Println(test1())  fmt.Println(test2())  fmt.Println(test3()) }  \/\/ \u51fd\u6570\u8fd4\u56de\u503c\u6ca1\u6709\u7533\u660e\u53d8\u91cf\uff0c \/\/ return \u65f6\uff0c\u628a i \u4fdd\u5b58\u8fdb\u4e86 temp \u53d8\u91cf\uff08\u4e34\u65f6\u4fdd\u5b58\u53d8\u91cf\u7684\u5730\u65b9\uff09 \/\/ defer \u65f6\uff0c\u628a i \u8fdb\u884c\u4e86+1\uff0c\u7531 2 \u53d8\u4e3a\u4e86 3\uff0c\u4f46\u662f\u5e76\u6ca1\u6709\u6539\u53d8 temp \u7684\u503c\uff0c\u6240\u6709\u7ed3\u679c\u8fd8\u662f 2 func test1() int {  var i = 1  defer func() {   err := recover()   if err != nil {    log.Println(err)   }   i++  }()   i++  return i }  \/\/ \u51fd\u6570\u8fd4\u56de\u503c\u6ca1\u6709\u7533\u660e\u53d8\u91cf\uff0c \/\/ return \u4e4b\u524d\u6709 panic,\u6240\u4ee5\u6ca1\u6709\u6267\u884c return \u8bed\u53e5\uff0c\u56e0\u6b64\u8fd4\u56de\u503c\u4e2d\u4e3a temp=0 \uff08\u8fd4\u56de\u7c7b\u578b\u7684\u9ed8\u8ba4\u503c\uff09 \/\/ defer \u65f6\uff0c\u628a i \u8fdb\u884c\u4e86+1\uff0c\u7531 0 \u53d8\u4e3a\u4e86 1\uff0c\u4f46\u662f\u5e76\u6ca1\u6709\u6539\u53d8 temp \u7684\u503c\uff0c\u6240\u6709\u7ed3\u679c\u8fd8\u662f 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) }  \/\/ \u51fd\u6570\u8fd4\u56de\u503c\u7533\u660e\u53d8\u91cf\u4e86\u53d8\u91cf i \/\/ return \u4e4b\u524d\u6709 panic,\u6240\u4ee5\u6ca1\u6709\u6267\u884c return \u8bed\u53e5\uff0c\u56e0\u6b64\u8fd4\u56de\u503c\u4e2d\u4e3a i=0 \uff08\u8fd4\u56de\u7c7b\u578b\u7684\u9ed8\u8ba4\u503c\uff09 \/\/ defer \u65f6\uff0c\u628a i \u8fdb\u884c\u4e86+1\uff0c\u7531 0 \u53d8\u4e3a\u4e86 1\uff0c\u6b64\u65f6 i \u5c31\u662f\u4fdd\u5b58\u8fd4\u56de\u7ed3\u679c\u7684\u53d8\u96f6\uff0c\u56e0\u6b64\u8fd4\u56de\u7ed3\u679c\u4e3a 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   <\/code><\/pre>\n<p>\u4eca\u5929\u521a\u521a\u53d1\u73b0\u8fd9\u5757\u77e5\u8bc6\u4e0d\u592a\u719f\uff0c\u5927\u4f6c\u4eec\u968f\u4fbf\u770b\u770b&#8230;<\/p>\n<\/p><\/div>\n<div> <b>\u5927\u4f6c\u6709\u8a71\u8aaa<\/b> (<span>0<\/span>)        <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<ul>\n<li>\n","protected":false},"excerpt":{"rendered":"<p>golang return def&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/199873"}],"collection":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=199873"}],"version-history":[{"count":0,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/199873\/revisions"}],"wp:attachment":[{"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=199873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=199873"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=199873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}