【Golang】自定义错误

【Golang】自定义错误

Go语言的基础学习〜从学习Web应用开发到结束,现在进行复习总结。从基础到应用的学习。

//カスタムエラー
//Stringer同様errorもある。
//interface3の使い方

/*Errorメソッドを持つ型をまとめている
type error interface {
    Error() string
}
*/

package main 

import (
    "fmt"
)

//4
//カスタムエラーの名前
type UserNotFound struct {
    Username string
}


//5
//特殊メソッド
//エラーの出力を変える
//ポインタ型で指定する。
func (e *UserNotFound) Error() string {
    //これが出力される
    return fmt.Sprintf("User not found: %v.\n", e.Username)
}

//2
//エラーを返す関数
//返り値をエラー型にする
func MyFunc() error {
    ok := false
    if !ok {
        //3
        //エラーを返す
        //エラーを定義する時は、&をつける
        //&はなくても実行はできるが、ルールとしてつける。
        //エラーハンドリングでバグの原因になる
        //アドレスで比較する
        return &UserNotFound{Username: "mike"}
    }
    return nil
}

func main() {
    //&UserNotFound{Username: "mike"}で&をつける理由
    e1 := &UserNotFound{"mike"}
    e2 := &UserNotFound{"mike"}
    fmt.Println(e1 == e2)
    //>>false
    //&がなければTrueになる
    //e1とe2は違うという事。異なるエラー。アドレスで比較しないと同じエラーになってしまう。


    //1
    //もしエラーが帰ってきたらエラーを出力
    //エラーじゃなかったらnilを返す
    err := MyFunc()
    if err != nil {
        fmt.Println(err)
    }
}
广告
将在 10 秒后关闭
bannerAds