エンジニア採用担当がプログラミング頑張る話【20日目/2ヶ月間】
こんにちは、@hiroki_maekawaです。
昨日何とかGETリクエストでデータベースの情報を取得することができたのですが、取りたいように取れていなかったので、原因を考えていきたいと思います。
(ブログの画像は一昨日に引き続きGopherとMySQLのキャラクターです。MySQLのキャラクターには名前ってついてるのかな。)
今日の目標
・GETリクエストでmysqlの情報を複数表示
・CRUDをAPI経由で行う
1. GETリクエストでmysqlの情報を複数表示
昨日書いたコードは、2つの問題点があったので、それぞれ解決していきたいと思います。
①必要なデータより多いデータが取れてしまっている
②ブラウザに取ってきたデータが全て反映できていない
①必要なデータより多いデータが取れてしまっている
これは過去の自分のNoteを参考にし、ループ処理に条件文が書かれていないからだと分かりました。(無限ループで50GBのファイルを作ってしまったという悲劇を思い出しました。。)
下記のように条件文、breakを追加しました。
for i := 0; i < 3; i++ {
rows.Next()
err = rows.Scan(&fruits.ID, &fruits.Name, &fruits.Price)
if err != nil {
fmt.Println(err)
} else if i == 3 {
break
}
②ブラウザに取ってきたデータが全て反映できていない
これはまずどこに原因があるのか最初分からず@Sueken51さんに相談したところ、 「echoなのか、mysqlなのか、まずどこに原因があるか考えると良いですね。」とアドバイスを頂き、ループ処理の後にfmt.Println(fruits)を書いてrunしてみたところ、必要な分だけのデータが取得できていたので「原因はechoか。。」という仮説を立てることができました。
また、エラー文などが出てない時はfmt.Println()なんかを使って問題点を見つけていくのか・・!と1人で感動しました。
ただこの後配列や構造体など検討したのですが、ブラウザに3行のデータを出す方法が分からず完全に煮詰まってしまいました。。
@Sueken51さんに、まずは「これを実行して結果出てくる出力をみただけで答えられますか?答えられないのであれば変数周りの理解が足りてないのでそこをちゃんと固めると良さそうです。」
というアドバイスを頂き、「まさに。。」と思ったため、ドットインストールや、メルカリに勤めている方が出されている資料などを参考に、基礎の復習を進めました。
結局今日中に理由は分からず、明日に持ち越しとなってしまいました。
今日できるようになったこと
煮詰まっていたのでほとんどないのですが、強いていうのであれば
・実現したいことができない理由に対する仮説を立てる
なのかなと。
さいごに
今日は「これを1人で解決するまで寝れまテン」的な負けず嫌いが発動してしまい、同じところで何時間もつまずいてしまっていました、、
まぁでもこういう日もあります。基本を勉強できるチャンスということでポジティブにいきたいと思います。
最後に、面白いコメント(勇気付けられるコメント)を見つけたので貼っておきます(笑)
それではまた!