是的,Go語言錯誤處理可以處理多種錯誤類型。在Go中,錯誤通常是通過返回值的方式傳遞的,當一個函數可能產生多種錯誤時,可以使用自定義錯誤類型或者使用內置的error接口來表示不同的錯誤情況。
以下是兩種處理多種錯誤類型的方法:
package main
import (
"errors"
"fmt"
)
type CustomError struct {
msg string
}
func (e *CustomError) Error() string {
return e.msg
}
func main() {
err := doSomething()
if err != nil {
switch e := err.(type) {
case *CustomError:
fmt.Println("Custom error:", e.msg)
case error:
fmt.Println("Generic error:", e)
default:
fmt.Println("Unknown error")
}
}
}
func doSomething() error {
// 返回自定義錯誤
return &CustomError{"This is a custom error"}
}
package main
import (
"errors"
"fmt"
)
func main() {
err := doSomething()
if err != nil {
switch e := err.(type) {
case *MyError1:
fmt.Println("MyError1:", e.msg)
case *MyError2:
fmt.Println("MyError2:", e.msg)
default:
fmt.Println("Unknown error")
}
}
}
type MyError1 struct {
msg string
}
func (e *MyError1) Error() string {
return e.msg
}
type MyError2 struct {
msg string
}
func (e *MyError2) Error() string {
return e.msg
}
func doSomething() error {
// 返回不同的錯誤類型
return &MyError1{"This is an error of type MyError1"}
}
在這兩個示例中,我們都展示了如何處理多種錯誤類型。在第一個示例中,我們定義了一個自定義錯誤類型CustomError
,并在main
函數中使用類型斷言檢查錯誤是否為CustomError
類型。在第二個示例中,我們定義了兩個自定義錯誤類型MyError1
和MyError2
,并使用類型斷言檢查錯誤是否為這兩個類型之一。