エンジニア採用担当がプログラミング頑張る話【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)
}
途中エラー出まくりで目から汗が出そうになりましたが、何とかコマンドには反映することができました。
ただ、何で2回分反映されてきてしまったんだろう。。
しかも、なんでブラウザには一行しか反映されていないんだ。。
それぞれ原因を考えていきたいと思います。
今日できるようになったこと
・GETリクエストでMySQLのデータを取得する(1行だけ)
さいごに
今日は、昨日と一昨日やったことを合わせるという、パズルみたいなことをしてました。プログラミングはできることが増えてくると、それらを上手い具合に組み合わせていくものなんだなぁ〜と思いました。
ただ今日はパズルする&エラーを潰していただけで、実現したいことは100%できていないので、引き続き解決策を考えていきたいと思います。
それではまた!