メソッドに関して一点質問があります。
DBに保存するメソッドを以下のように書いていまして、以下は正常に動作しています。
go
1func (u *User) Create() error { 2 err := Db.QueryRow(`INSERT INTO users(name, email) VALUES($1, $2) RETURNING id`, u.Name, u.Email).Scan(&u.Id) 3 return err 4}
最初に、以下のように書いていたときはエラーがでてしまっていました。
go
1func (u *User) Create() error { 2 err := Db.QueryRow(`INSERT INTO users(name, email) VALUES($1, $2) RETURNING id`, u.Name, u.Email).Scan(u.Id) 3 return err 4}
具体的には、Scanの引数をu.Id
とするか&u.Id
とするかの違いです。
私は、最初レシーバとしてポインタを渡しているので、u.Id
とすれば良いと考えていたのですが、こちらはエラーになってしまいました。
これが上手く行かなかった原因は、ポインタを自動的にデリファレンスしているからでしょうか?
デリファレンスで構造体になっているので、レシーバをポインタにしても再度ポインタにする必要があるということでしょうか?
ご回答よろしくお願いいたします。
追記
Userの構造体を載せておりませんでした。。
構造体はこのように定義しております。
go
1type User struct { 2 Id int `json:"id"` 3 Account_id string `json:"account_id"` 4 Name string `json:"name"` 5 Email string `json:"email"` 6 Phone_num int `json:"phone_num"` 7}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/13 03:41
2018/11/13 03:54