32
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Goでの Mysql接続から構造体へのデータ割り当てまで

Last updated at Posted at 2018-12-08

GoでのMsql接続

GoにはDB接続のための標準パッケージが用意されています。
https://golang.org/pkg/database/sql/

加えて、mysqlのドライバが用意されているので、それをgo getしておきます。

go get "github.com/go-sql-driver/mysql"

Mysql接続からデータを引っ張ってくるまで

今回は、ローカルにあらかじめ用意しておいた、IDと名前があるだけの簡単なuserデータベースにアクセスしてみます。

データベース名:gosample
テーブル名:users
スクリーンショット 2018-12-08 20.52.24.png

package main

import (
	"database/sql" //ここでパッケージをimport
	"fmt"
	"log"

	_ "github.com/go-sql-driver/mysql" //コード内で直接参照するわけではないが、依存関係のあるパッケージには最初にアンダースコア_をつける

)

//引っ張ってきたデータを割り当てるための構造体を用意
type Person struct {
	ID   int
	Name string
}

func main() {

	//mysqlへ接続。ドライバ名(mysql)と、ユーザー名・データソース(ここではgosample)を指定。
	db, err := sql.Open("mysql", "root@/gosample")
	log.Println("Connected to mysql.")

	//接続でエラーが発生した場合の処理
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	//データベースへクエリを送信。引っ張ってきたデータがrowsに入る。
	rows, err := db.Query("SELECT * FROM users")
	defer rows.Close()
	if err != nil {
		panic(err.Error())
	}

	//レコード一件一件をあらかじめ用意しておいた構造体に当てはめていく。
	for rows.Next() {
		var person Person //構造体Person型の変数personを定義
		err := rows.Scan(&person.ID, &person.Name)

		if err != nil {
			panic(err.Error())
		}
		fmt.Println(person.ID, person.Name) //結果 1 yamada 2 suzuki

	}
}

##参考
Golang MySQL Tutorial
https://tutorialedge.net/golang/golang-mysql-tutorial/

32
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?