<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                > go語言中主要有兩類錯誤: > * error是可預見的錯誤,不會導致程序退出 > * panic是不可預見的錯誤,會導致程序退出。 ## error基本用法 > go語言內置了一個錯誤接口 ~~~ type error interface { Error() string } ~~~ > `errors包`提供了基本的錯誤實現 ~~~ // 創建一個錯誤 errors.New("錯誤信息") ~~~ > 例子 ~~~ package main import ( "errors" "fmt" ) // 通常一個函數的錯誤信息,都會放在最后一個返回值 // 一般如果函數沒有錯誤,返回的error就是nil func DoTest() (int, error) { // 返回錯誤 return 0, errors.New("錯誤信息!") } func main() { _, err := DoTest() // 判斷錯誤 if err != nil { fmt.Println(err) } } ~~~ ## 自定義錯誤類型 > 我們只要實現錯誤接口,就可以自定義錯誤類型 ~~~ package main import ( "fmt" "time" ) // 自定義錯誤類型MyError type MyError struct { What string // 錯誤的原因 When time.Time // 錯誤發生的時間 } // 實現error接口的方法 func (e *MyError) Error() string { return fmt.Sprintf("happend at %v, %s", e.When, e.What) } // 測試自定義的錯誤 func dotest() error { // 創建一個自定義錯誤,并返回 return &MyError{What: "it didn't work", When: time.Now()} } func main() { if err := dotest(); err != nil { fmt.Println(err) } } ~~~ ## panic用法 > panic,類似其他語言throw拋出異常一樣,通過函數調用鏈,一層層的把異常往上拋出去,如果沒有人攔截異常,就會退出程序 ~~~ package main import "fmt" func main() { fmt.Println("a") if true { // 拋出panic錯誤,后面的代碼不會運行 panic("出錯啦!") } fmt.Println("b") } ~~~ ## 攔截panic錯誤 > 通過defer和recover實現攔截panic錯誤 ~~~ package main import "fmt" // 演示攔截panic錯誤 func DoTest() { // 延遲執行函數 defer func() { // 在延遲執行函數中,通過recover攔截panic錯誤 if err := recover(); err != nil { fmt.Println("攔截到錯誤:", err) } }() // 拋出panic錯誤,后面代碼不會執行 if true { panic("panic錯誤") } fmt.Println("b") } func main() { fmt.Println("a") DoTest() fmt.Println("c") } ~~~ > 因為我們通過recover函數,在延遲執行函數中,攔截了Panic錯誤,除了拋出panic錯誤的函數被中斷了,其他執行流程都不受影響,類似其他語言中的try/catch機制
                  <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>

                              哎呀哎呀视频在线观看