My Note

自己理解のためのブログ

GoとMySQLの学習メモ ( DB接続とデータ取得 )

今回勉強するにあたってこの記事を利用しました。

tutorialedge.net

Goでmysqlに接続するために今回は↓のドライバを利用しました。

github.com

■ DockerでMySQLを起動してGoからDBを操作する。

mysqlコンテナの作成

version: '3'
services:
    db:
        image: mysql:5.7
        container_name: dev_mysql
        ports:
            - "3306:3306"
        volumes:
            - ./db/mysql_data:/var/lib/mysql
        environment:
            MYSQL_ROOT_PASSWORD: password
            MYSQL_USER: app
            MYSQL_PASSWORD: password

データベースを作成してデータを入れる。

■ データベース作成
mysql> create database devdb;

■ テーブル作成
mysql> create table users (id int, name varchar(10));

■ データ追加
mysql> insert into users values (1, 'yamada');

main.go

package main

import (
    "database/sql"
    "fmt"

    _ "github.com/go-sql-driver/mysql"
)

type Person struct {
    ID   int32
    Name string
}

func main() {
    db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/devdb")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

 
        insert, err := db.Query("INSERT INTO users VALUES ( 2, 'gotest')")
        if err != nil {
            panic(err.Error())
        }
        defer insert.Close()
 

    results, err := db.Query("SELECT * FROM users")
    if err != nil {
        panic(err.Error())
    }
    defer results.Close()

    for results.Next() {
        var person Person
        err := results.Scan(&person.ID, &person.Name)
        if err != nil {
            panic(err.Error())
        }
        fmt.Println(person.ID, person.Name)
    }
}

ユーザ情報をSELECTした結果をPersonの構造体にデータを格納しました。 実行した結果は↓

1 yamada
2 gotest