---
title: "Go 言語から MariaDB Server を使ってみる"
publish_date: 2019-06-04
updated_date: 2023-10-12
author: "MariaDB"
tags:
  - name: "Golang"
    url: "/ja/resources/blog/tag/golang.md"
  - name: "MariaDB Server"
    url: "/ja/resources/blog/tag/mariadb-server-ja.md"
---

# Go 言語から MariaDB Server を使ってみる

Go (Go言語 / Golang, <https://golang.org/>) は C言語を開発したことで知られる [Ken Thompson](https://ja.wikipedia.org/wiki/%E3%82%B1%E3%83%B3%E3%83%BB%E3%83%88%E3%83%B3%E3%83%97%E3%82%BD%E3%83%B3) らによって2009 年に設計された比較的新しいプログラミング言語で，最近人気が高まっています。  
今回は Go から MariaDB Server 10.3 に接続してみます。

### 実行環境

以下の実行環境を用いました。

- CentOS 7.6.1810
- MariaDB Server 10.3.15
- Golang 1.11.5

### Golang / MySQL ドライバのインストール

以下のコマンドで golang をインストールします。

```
sudo yum -y install epel-release
sudo yum -y install golang

```

執筆時点では以下の RPM がインストールされました。

```
golang-1.11.5-1.el7.x86_64
golang-bin-1.11.5-1.el7.x86_64
golang-src-1.11.5-1.el7.noarch

```

Go では外部ライブラリを `go get` でインストールします。現時点で MariaDB から Go 用 Connector は提供されていませんので，今回はGitHub で公開されている [MySQL 用ドライバ](https://github.com/go-sql-driver/mysql/)を用います。

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

```

`go env` で表示される GOPATH で示されるパスにドライバがダウンロード/インストールされます。

```
$ go env | grep GOPATH 
GOPATH="/home/vagrant/go"

```

### サンプルコード1

MariaDB Server へ接続し，バージョンを確認するサンプルコード(check\_mariadb\_ver.go)は以下のようになります。なお，事前に test\_db データベースと db\_user ユーザを作成しています。

```
// check_mariadb_ver.go
package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    // Create the database handle, confirm driver is present
    db, _ := sql.Open("mysql", "db_user:password@/test_db")
    defer db.Close()

    // Connect and check the server version
    var version string
    db.QueryRow("SELECT VERSION()").Scan(&version)
    fmt.Println("Connected to: ", version)
}

```

### サンプルコード1実行結果

サンプルコードをコンパイル/実行します。

```
$ go build check_mariadb_ver.go
$ ls -l check_mariadb_ver*
-rwxrwxr-x 1 vagrant vagrant 5090940 May 24 10:46 check_mariadb_ver
-rw-rw-r-- 1 vagrant vagrant     453 May 24 10:35 check_mariadb_ver.go
$ ./check_mariadb_ver
Connected to:  10.3.15-MariaDB

```

また，Go ではスクリプト言語のように `go run` でプログラムを実行することができます。

```
$ go run check_mariadb_ver.go
Connected to:  10.3.15-MariaDB

```

### サンプルコード2

[https://github.com/datacharmer/test\_db](https://github.com/datacharmer/test_db) にある MySQL 用サンプルデータを MariaDB Server にインポートし，SELECT文を Go で書かれたプログラムから実行してみます。

```
// test_select.go
package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    // Create the database handle, confirm driver is present
    db, _ := sql.Open("mysql", "db_user:password@/employees")
    defer db.Close()

    // Execute the query
    results, err := db.Query("SELECT emp_no, first_name, last_name from employees limit 10")
    if err != nil {
        panic(err.Error()) // proper error handling instead of panic in your app
    }

    for results.Next() {
        var emp_no int
        var first_name string
        var last_name string

        err = results.Scan(&emp_no, &first_name, &last_name)
        if err != nil {
            panic(err.Error()) // proper error handling instead of panic in your app
        }
        fmt.Println("ID: ", emp_no, " Name: ", first_name, last_name)
    }
}

```

### サンプルコード2実行結果

正常にテストデータが取得できているようです。

```
$ go run test_select.go
ID:  10001  Name:  Georgi Facello
ID:  10002  Name:  Bezalel Simmel
ID:  10003  Name:  Parto Bamford
ID:  10004  Name:  Chirstian Koblick
ID:  10005  Name:  Kyoichi Maliniak
ID:  10006  Name:  Anneke Preusig
ID:  10007  Name:  Tzvetan Zielinski
ID:  10008  Name:  Saniya Kalloufi
ID:  10009  Name:  Sumant Peac
ID:  10010  Name:  Duangkaew Piveteau

```

### まとめ

今回は Go で書かれたプログラムから MariaDB Server に接続し，SELECT 文を実行するサンプルコードについて解説させていただきました。