エンジニア採用担当がプログラミング頑張る話【23日目/2ヶ月間】
こんにちは、@hiroki_maekawaです。
ぎっくり背中で痛めていた肩甲骨と首の痛みが取れてきて、何とかパソコンに向かえるようになったので、プログラミング学習を再開していきます。
ぎっくり背中、相当ツラいので、再発しないように日々運動やストレッチを習慣づけていきたいと思います。ストレッチポール大活躍してます。
一週間前、1日の学習を終えてちょうどこのブログを書く前にぎっくり背中になってしまったので、当時のことを思い出しながらブログを書いていきたいと思います。
まずはAtCoderのサンプル問題(いちばん簡単なやつ)を解きました。
この問題で、Scanの方法や結果の出し方を学びました。
その後、ずっと解決方法が分からなかった「データベースからselectしてきた情報をJSON形式で複数GETリクエストで出力させる」方法について、@Sueken51さんにヒントを頂きながら無事理解することができました。
かなりヒントを頂いたので自力で反映させたかったですが、最終的には答えを頂くかたちになりました、、自分が考えていた方法と近かったのでかなり悔しかったですが、途中自分で色々と試行錯誤することができたので非常に良い勉強になりました。
package main
import (
"database/sql"
"fmt"
"net/http"
_ "github.com/go-sql-driver/mysql"
"github.com/labstack/echo"
)
//Fruit 構造体
type Fruit struct {
ID int `json:"id"`
Name string `json:"name"`
Price int `json:"price"`
}
func main() {
//Echo立ち上げる
e := echo.New()
//GETリクエスト(ルーティング)
e.GET("/show", show)
//サーバー起動
e.Start(":9000")
}
func show(c echo.Context) error {
//接続
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)
}
fruits := make([]Fruit, 0)
//ループ処理 + Next関数
for i := 0; i < 3; i++ {
f := Fruit{}
rows.Next()
err = rows.Scan(&f.ID, &f.Name, &f.Price)
if err != nil {
fmt.Println(err)
}
fruits = append(fruits, f)
}
return c.JSON(http.StatusOK, fruits)
}
Fruitsの構造体を作り→makeでスライスを作り→ループ処理でScanしたものをapppendで追加していくという流れですが、ループ処理の中にf := Fruit{}を入れる発想がなく、自力では実現することができませんでした。
ちゃんと反映されてます。
下記の例まで頂いて、自分では理解していたつもりだったのですが、「こういう使い方もできるのか、、!」と納得しました。
package main
import (
"fmt"
)
type X struct {
Name string
}
func main() {
xs := make([]X, 0)
values := []string{"hello", "world", "!!"}
for _, v := range values {
x := X{Name: v}
xs = append(xs, x)
}
fmt.Println(xs)
}
そしてこの感動後、ぎっくり背中になってしまうという流れでした。。普段パソコンを使う時間が長い人は猫背の姿勢になってしまって首や肩甲骨を痛めやすいので、こまめにストレットポールに乗ったり、壁を使って胸筋や前腕をストレッチすると良いそうです。
健康第一ですね・・!
それではまた!