見出し画像

エンジニア採用担当がプログラミング頑張る話【19日目/2ヶ月間】

こんにちは、@hiroki_maekawaです。プログラミング言語GoにはGopherというマスコットがいるんですが(上の画像はgoptherとmysqlのキャラクターのコラボ)、愛嬌あって良いですね(笑)

さて、昨日はgolangとmysqlを接続して→DBから情報を取得するコードを書いたので、今日はGETリクエストでMySQLのデータを取ってくるコードを書きたいと思います。(うまくつながりますように。)

今日の目標

・コードレビューの確認
・GETリクエストでMySQLのデータを取得する


1. コードレビューの確認

if err != nil {
		fmt.Println(err)
	}

まずは昨日書いたコードのレビューを頂いたので、内容を確認していきたいと思います。

ここの部分でreturnを使っておらず、「エラーを表示するだけだと次の処理に行ってしまうので、return文などするようにするとより良くなると思いました。」とのコメント。

return文について理解していなかったのでreturn文の意味を調べてみました。
【用語】returnを使うことで、関数内で処理をした結果を「戻り値」として返すことができ、次の処理を行うことができる。また関数を終了することもできる。

ログなどを返している例がありましたが、また必要に迫られてはいないので、自分の中でreturnしないといけない理由が見つかってからreturnについて突き詰めていくことになりました。


2. GETリクエストでMySQLのデータを取得する

昨日書いたコードと、一昨日書いたコードを合体する作業です。

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/labstack/echo"
)

//ID 宣言
var ID int
//Name 宣言
var Name string
//Price 宣言
var Price int
var err error
var db *sql.DB
//Fruits 構造体

type Fruits struct {
	ID    int    `json:"id"`
	Name  string `json:"name"`
	Price int    `json:"price"`
}

func main() {
	//GETリクエスト
	e := echo.New()
	e.GET("/show", show)
	e.Logger.Fatal(e.Start(":9000"))
}

func show(c echo.Context) error {
	fruits := Fruits{}

	//接続
	db, err = sql.Open("mysql", "root:password@/gomysql")
	if err != nil {
		fmt.Println(err)
	}
	defer db.Close()

	//複数レコードをselect -> ループ処理
	rows, err := db.Query("select id, name, price from gomysql")
	if err != nil {
		fmt.Println(err)
	}

	//ループ処理 + Next関数
	for rows.Next() {
		err = rows.Scan(&fruits.ID, &fruits.Name, &fruits.Price)
		if err != nil {
			fmt.Println(err)
		}
		fmt.Println(fruits)
	}
	return c.JSON(http.StatusOK, fruits)
}

途中エラー出まくりで目から汗が出そうになりましたが、何とかコマンドには反映することができました。

スクリーンショット 0032-06-12 20.55.58

ただ、何で2回分反映されてきてしまったんだろう。。

しかも、なんでブラウザには一行しか反映されていないんだ。。

スクリーンショット 0032-06-13 16.09.42

それぞれ原因を考えていきたいと思います。


今日できるようになったこと

・GETリクエストでMySQLのデータを取得する(1行だけ)


さいごに

今日は、昨日と一昨日やったことを合わせるという、パズルみたいなことをしてました。プログラミングはできることが増えてくると、それらを上手い具合に組み合わせていくものなんだなぁ〜と思いました。

ただ今日はパズルする&エラーを潰していただけで、実現したいことは100%できていないので、引き続き解決策を考えていきたいと思います。

それではまた!


この記事が気に入ったらサポートをしてみませんか?