<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 宕機 > **panic()** > 調用panic()方法后,之后代碼都是無效的 ``` package main import "fmt" func main() { panic("宕機") fmt.Println("宕機后這里不執行") } ``` ``` // 結果: panic: 宕機 goroutine 1 [running]: main.main() d:/桌面/study/Go/1/hello.go:4 +0x27 exit status 2 ``` ### 宕機恢復 > Go語言使用內置函數recover來捕獲宕機 ``` package main import "fmt" func pro() { // 匿名函數 defer func() { // pro函數退出前執行defer語句 fmt.Println("func pro exit") }() panic("Serius bug") } func main() { // 匿名函數 defer func() { // pro函數退出前執行defer語句 fmt.Println("func main exit") }() pro() fmt.Println("Invalid code") } ``` ``` // 結果 func pro exit func main exit panic: Serius bug goroutine 1 [running]: main.pro() d:/桌面/study/Go/1/hello.go:11 +0x49 main.main() d:/桌面/study/Go/1/hello.go:20 +0x3f exit status 2 ``` 原理 1,pro()函數內的panic方法實現宕機 2,由于pro()函數內匿名函數通過defer語句延遲執行,在panic觸發宕機后,匿名函數會打印"func pro exit" 3,main()函數內匿名函數通過defer語句延遲執行,退出前會打印"func main exit" 4,程序退出 由于defer語句延遲執行的特性,通過“ defer語句+匿名函數+recover方法”來對宕機的捕捉 ``` package main import "fmt" func pro() { // 匿名函數 defer func() { // pro函數退出前執行defer語句 if err := recover(); err != nil { // recover()捕獲panic()傳入的參數 fmt.Println(err) } }() panic("Serius bug") } func main() { pro() fmt.Println("valid code") } // 結果 Serius bug valid code ``` 原理 通過recover方法獲取到panic傳入的參數,進行打印程序從當前宕機點退出當前函數后繼續執行 ``` package main import "fmt" func pro(f func()) { defer func() { if err := recover(); err != nil { fmt.Println(err) } }() f() } func main() { pro(func() { fmt.Println("This is func1") panic("bug 1") }) pro(func() { fmt.Println("This is func2") panic("bug 2") }) fmt.Println("valid code") } This is func1 bug 1 This is func2 bug 2 valid code ``` ``` 實際編程中,我們會專門封裝一個函數,以一種安全模式來運行傳入所有方法 pro函數用于安全模式運行所有傳入的匿名函數或閉包的執行函數,即使發生panic,主程序也不會掛 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看