GoでMySQLのデータを取得する
用意するテーブルはこんな感じ
id | name |
---|---|
1 | Taro |
1 | Jiro |
コード
一応ここに同じコードがある https://github.com/nyo3q1/golang_simple_api
package main import ( "log" "database/sql" _ "github.com/go-sql-driver/mysql" ) type People struct { id int64 name string } type Peoples []People func GetPeoples() Peoples{ db, err := sql.Open("mysql", "docker:docker@tcp(db)/test_database") if err != nil { log.Fatal("db error.") } rows, err := db.Query("select * from people") if err != nil { log.Fatal(err) } defer rows.Close() var peoples Peoples for rows.Next() { people := People{} if err := rows.Scan(&people.id, &people.name); err != nil { log.Fatal(err) } peoples = append(peoples, people) } defer db.Close() return peoples }
簡単な説明
説明する必要もないけど記事を書く上でコードだけというのも味気ないので...
この行で
sql.Open("mysql", "docker:docker@tcp(db)/test_database")
個人的に面白いなとおもったのが取得したデータを変数に格納するところ。
取得したカラムに沿っていかないとダメ。
取得するカラムを意識的に記述できて、レイテンシも向上しそうで好き。
rows.Scan(&people.id, &people.name)
ちなみにpeoplesをreturnするようにしているけど受け取り元ではこうやって書く
peoples := GetPeoples()