【Go初心者】関数とメソッドの使い分けについての質問
解決したいこと
Goにおける関数とメソッドの理解を深めて、それぞれを正しい場面で適切に使用できるようになりたいです。
疑問点
簡単なTodoアプリを作成しています。
ユーザー情報を作成するときメソッドを使用し、取得する時は関数を使用していますが、使い分けている理由は下記の解釈であっておりますか?
ユーザー作成
func (u *User) CreateUser() (err error) {
cmd := `insert into users (
uuid,
name,
email,
password,
create_at
) values (?, ?, ?, ?, ?)`
_, err = Db.Exec(cmd, createUUID(), u.Name, u.Email, Encrypt(u.PassWord), time.Now())
if err != nil {
log.Fatalln(err)
}
return err
}
↑ 作成の際は構造体UserのNameとEmailの値が必要なので、メソッドにすることで効率的に値を取得できる(u.Name, u.Emailの部分)
ユーザー取得
func GetUser(id int) (user User, err error) {
user = User{}
cmd := `select id, uuid, name, email, password, create_at from users where id = ?`
err = Db.QueryRow(cmd, id).Scan(
&user.ID,
&user.UUID,
&user.Name,
&user.Email,
&user.PassWord,
&user.CreateAt,
)
return user, err
}
↑ 取得の際はUserの値が必要ではないので関数で良い
結論
構造体の値が必要なときはメソッド、不要な時は関数