Go 言語から MariaDB Server を使ってみる
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 をインストールします。
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 用ドライバを用います。
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 にある 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 文を実行するサンプルコードについて解説させていただきました。