はじめに
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 文を実行するサンプルコードについて解説させていただきました。