在Go語言中可以使用errors.New()
函數創建一個新的錯誤,并使用fmt.Errorf()
函數格式化錯誤信息。Go中的錯誤處理通常采用if語句結構,通過判斷錯誤是否為nil來處理錯誤。
以下是一個示例代碼,演示如何遍歷和處理錯誤堆棧:
package main
import (
"errors"
"fmt"
)
func main() {
err := doSomething()
if err != nil {
fmt.Println("Error:", err)
// 打印錯誤的堆棧信息
fmt.Printf("%+v\n", err)
}
}
func doSomething() error {
err := doSomethingElse()
if err != nil {
return fmt.Errorf("doSomething failed: %w", err)
}
return nil
}
func doSomethingElse() error {
return errors.New("something went wrong")
}
在上面的示例中,doSomethingElse()
函數返回一個新創建的錯誤。在doSomething()
函數中調用doSomethingElse()
函數,如果doSomethingElse()
函數返回錯誤,則在doSomething()
函數中將其包裝為一個新的錯誤,然后返回。在main()
函數中調用doSomething()
函數并判斷返回的錯誤是否為nil,如果不為nil,則打印錯誤信息和堆棧信息。
使用%+v
參數可以打印錯誤的完整堆棧信息。