LoginSignup
0
0

More than 3 years have passed since last update.

【Golang】カスタムエラー

Posted at

【Golang】カスタムエラー

Golangの基礎学習〜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)
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0