はじめにGo言語でSQLiteを使えるようにするためにSQLiteのドライバーを取得しておく必要があるが、

いつも使用しているGit Bashでは取得できないため、


下記のURLからgit-sdkをダウンロードして、インストールしておく。

https://github.com/git-for-windows/build-extra/releases


インストール後に


msys2_icon


デスクトップ上にMSYS2のアイコンが出来ているので、

今回はmsys2から操作を行う。

MSYS2 homepage


msys2を開いたら、下記のコマンドでGo言語でSQLiteを使えるようにするためのライブラリをインストールする。


#パッケージマネージャを更新する
pacman -yS
# 事前にGCCを入れる
pacman -S gcc
go get github.com/mattn/go-sqlite3



今回の作業ディレクトリは~/workspace/sqlにする

Atomで作業ディレクトリ開き、ディレクトリ内でsample.dbを作成する

~/workspace/sql/sample.db


sample.dbと同階層にmain.goを作成し、下記のコードを入力する。

package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/mattn/go-sqlite3"
)

func main() {
	db, err := sql.Open("sqlite3", "sample.db")
	if err != nil {
		log.Fatal(err)
	}

	s := `CREATE TABLE users(
	  id INTEGER PRIMARY KEY AUTOINCREMENT,
	  name VARCHAR(8),
	  fname VARCHAR(8),
	  gender CHAR(1)
	  );`
	
	res, err := db.Exec(s)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(res)
}

_ "github.com/mattn/go-sqlite3"は自動入力されないので、手打ちする。

db, err := sql.Open("sqlite3", "sample.db")は、sqlite3を使ってsample.dbを開くという意味である。

sql構文で作成したTABLEを変数sとする。sql構文をgoの中で実行する際は、db.Execを使用する。

msys2を開いてgo run main.goと実行すると、TABLEがsample.goの中に作成される。




次にデータを挿入してみる。

package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/mattn/go-sqlite3"
)

func main() {
	db, err := sql.Open("sqlite3", "sample.db")
	if err != nil {
		log.Fatal(err)
	}

	t := "INSERT INTO users(name,fname,gender) VALUES('ryoko','saito','f')"
	if err != nil {
		log.Fatal(err)
	}

	res, err := db.Exec(t)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(res)
}

INSERT INTO users(name,fname,gender) VALUES('ryoko','saito','f')したものを変数tとしExec(t)して、go run main.goするとデータが挿入される。