Goで実行したときに、(no value) used as valuecompilerというエラーメッセージが出たので対処方法をメモ書きしておきます。
このエラーは戻り値(Return Type)が適切に設定できていないときに出るエラーなので、戻り値が正しく入力されているかを確認すれば解決できます。今回私の場合、error型の戻り値を想定していたものの、コードの中で正しく設定できていなかったためにエラーとなりました。
今回エラーが出たのは以下のコードの err = app.DB.Update(*practice)の部分です。
func (app *application) Update(w http.ResponseWriter, r *http.Request) {
・・・
err = app.DB.Update(*practice)
if err != nil {
app.errorJSON(w, err)
return
}
このapp.DB.Updateは別ファイルを読み込んで使っているので、そのファイルの該当場所を見てみます。
func (m *MysqlDBRepo) UpdatePerson(practice models.practice) error {
ctx, cancel := context.WithTimeout(context.Background(), dbTimeout)
defer cancel()
stmt := `update practice set pall = ? where id = ?`
_, err := m.DB.ExecContext(ctx, stmt, practice.ID)
if err != nil {
return err
}
return nil
}
データベースを操作するタイプのものはrepository.goを作ってそこで管理しているので、この部分に誤りが無いかを確認してみます。
type DatabaseRepo interface {
Update(practice models.Practice)
}
お気づきですか?解決策は単純明快で、Update(practice models.Practice)の後にerrorを忘れていますので、これを追加すれば解決です。
type DatabaseRepo interface {
Update(practice models.Practice) error
}
エラーが無くなりました。
コメント