Stringer・エラーの作成【夏休みにGo vol.23】

こんにちは、しーたです。
今回はStringerとエラーの作成について学んでいきます。


Stringer

Stringerとは"String()"という"fmt.Println()"などでの出力内容を変更できる特別なメソッドです。
実際の例を見たほうが分かりやすいでしょう。

【Stringerなし】

type User struct {
	Name string
	age  int
}


func main() {
	user1 := User{"Yuki", 20}
	fmt.Println(user1)
}

画像1

【Stringerあり】

type User struct {
	Name string
	age  int
}


func (u User) String() string { //特別なメソッド"Stringer"
	return "You are \"" + u.Name + "\""
}

func main() {
	user1 := User{"Yuki", 20}
	fmt.Println(user1)
}

画像2

このように出力内容を調整することで"age"を見えないようにするなどの使い方ができます。


エラーの作成

オリジナルの関数について、エラーを作成することができます。

下記の例ではmyFunc()内で何らかのエラーがあった場合のエラーメッセージを作成しています。

※エラーの内容を"&"、つまりアドレスで渡しているのは「同じエラー文が複数個所から出力された場合に判別できなくなるのを防ぐため」です。

type UserNotFound struct { //エラー内容
	Username string
}

func (e *UserNotFound) Error() string { //*で受け取る
	return "User not found: \"" + e.Username + "\"" //エラーの出力内容
}

func myFunc() error {
	//処理
	ok := false //何らかのエラーが発生
	if ok == true {
		return nil //エラーが出ていないとき
	}
	return &UserNotFound{Username: "Yuki"} //&を渡す
}

func main() {
	if err := myFunc(); err != nil {
		fmt.Println(err)
	}
}

画像3


以上です。それでは!

いいなと思ったら応援しよう!