【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)
}
}