<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Go 錯誤處理 在Go里面通常采用顯式返回錯誤代碼的方式來進行錯誤處理。這個和Java或者Ruby里面使用異常或者是C里面運行正常返回結果,發生錯誤返回錯誤代碼的方式不同。Go的這種錯誤處理的方式使得我們能夠很容易看出哪些函數可能返回錯誤,并且能夠像調用那些沒有錯誤返回的函數一樣調用。 ```go package main import "errors" import "fmt" // Go語言里面約定錯誤代碼是函數的最后一個返回值, // 并且類型是error,這是一個內置的接口 func f1(arg int) (int, error) { if arg == 42 { // errors.New使用錯誤信息作為參數,構建一個基本的錯誤 return -1, errors.New("can't work with 42") } // 返回錯誤為nil表示沒有錯誤 return arg + 3, nil } // 你可以通過實現error接口的方法Error()來自定義錯誤 // 下面我們自定義一個錯誤類型來表示上面例子中的參數錯誤 type argError struct { arg int prob string } func (e *argError) Error() string { return fmt.Sprintf("%d - %s", e.arg, e.prob) } func f2(arg int) (int, error) { if arg == 42 { // 這里我們使用&argError語法來創建一個新的結構體對象, // 并且給它的成員賦值 return -1, &argError{arg, "can't work with it"} } return arg + 3, nil } func main() { // 下面的兩個循環例子用來測試我們的帶有錯誤返回值的函數 // 在for循環語句里面,使用了if來判斷函數返回值是否為nil是 // Go語言里面的一種約定做法。 for _, i := range []int{7, 42} { if r, e := f1(i); e != nil { fmt.Println("f1 failed:", e) } else { fmt.Println("f1 worked:", r) } } for _, i := range []int{7, 42} { if r, e := f2(i); e != nil { fmt.Println("f2 failed:", e) } else { fmt.Println("f2 worked:", r) } } // 如果你需要使用自定義錯誤類型返回的錯誤數據,你需要使用類型斷言 // 來獲得一個自定義錯誤類型的實例才行。 _, e := f2(42) if ae, ok := e.(*argError); ok { fmt.Println(ae.arg) fmt.Println(ae.prob) } } ``` 運行結果為 ``` f1 worked: 10 f1 failed: can't work with 42 f2 worked: 10 f2 failed: 42 - can't work with it 42 can't work with it ```
                  <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>

                              哎呀哎呀视频在线观看