はじめに
Go (Go言語 / Golang, https://golang.org/) は C言語を開発したことで知られる Ken Thompson らによって2009 年に設計された比較的新しいプログラミング言語で,最近人気が高まっています。
今回は Go から MariaDB Server 10.3 に接続してみます。
実行環境
以下の実行環境を用いました。
- CentOS 7.6.1810
- MariaDB Server 10.3.15
- Golang 1.11.5
Golang / MySQL ドライバのインストール
以下のコマンドで golang をインストールします。
| 1 2 | sudo yum -y install epel-release sudo yum -y install golang | 
執筆時点では以下の RPM がインストールされました。
| 1 2 3 | 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 用ドライバを用います。
| 1 | go get github.com/go-sql-driver/mysql | 
go env で表示される GOPATH で示されるパスにドライバがダウンロード/インストールされます。
| 1 2 | $ go env | grep GOPATH  GOPATH="/home/vagrant/go" | 
サンプルコード1
MariaDB Server へ接続し,バージョンを確認するサンプルコード(check_mariadb_ver.go)は以下のようになります。なお,事前に test_db データベースと db_user ユーザを作成しています。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // 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実行結果
サンプルコードをコンパイル/実行します。
| 1 2 3 4 5 6 | $ 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 でプログラムを実行することができます。
| 1 2 | $ go run check_mariadb_ver.go Connected to:  10.3.15-MariaDB | 
サンプルコード2
https://github.com/datacharmer/test_db にある MySQL 用サンプルデータを MariaDB Server にインポートし,SELECT文を Go で書かれたプログラムから実行してみます。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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実行結果
正常にテストデータが取得できているようです。
| 1 2 3 4 5 6 7 8 9 10 11 | $ 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 文を実行するサンプルコードについて解説させていただきました。


 
		 
		 
			 
			 
			 
			 
			 
			 
			 
			