(no value) used as valuecompilerの対処法

プログラミング学習帳 プログラミング

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
}

エラーが無くなりました。

コメント

タイトルとURLをコピーしました