看程式碼:
//自定義錯誤型別
type myError struct {
msg string
}
//實現錯誤介面,即為錯誤
func (mye *myError) Error() string {
return mye.msg
}
//自定義工廠類
//func NewMyError(checkFlag int) (err error) { //介面型別error定義返回值,接收時也是介面型別
func NewMyError(checkFlag int) (err *myError) {
//err *myError 這樣定義返回值,在返回nil時,且用介面型別 error接收時
// 判斷 err != nil 時永遠為true。因為介面型別(有值又有型別) error接收時,值為nil,但是型別T不為nil為myError,故不為nil。同時為nil時才時nil
if checkFlag == 1 {
return nil
}
err = &myError{"自定義錯誤!"}
return
}
func main() {
var err error //用介面型別 error接收
err = NewMyError(1)
if err != nil {
fmt.Println("不為nil!!")
fmt.Printf("%v\n",err)
} else {
fmt.Println("為nil!!")
}
}
看看列印結果:
故:這種定義 ,一定要【返回值定義】和【接收型別】對應。不能定義返回值時用【本身結構體型別定義】,接收時用【介面型別定義】。需返回值定義什麼,接受對應什麼。ps:學廢了!!!
本作品採用《CC 協議》,轉載必須註明作者和本文連結