Skip to content

SQLiteを使ってアプリを起動

SQLiteを使ってインメモリデータベースをデータストアとするGoアプリを起動します。

事前準備

SQLiteをインストールします。

go get github.com/mattn/go-sqlite3

実装

internal/infrastructure/

  • db.go
package infrastructure

import (
    "database/sql"
    "log"
    "os"

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

// データベースに接続します。
func ConnectDB() *sql.DB {

    db, err := sql.Open("sqlite3", ":memory:")
    if err != nil {
        log.Fatalf("failed to open in-memory db: %v", err)
    }

    // schema.sqlを読み込み・実行
    schema, err := os.ReadFile("internal/infrastructure/sqlite/schema.sql")
    if err != nil {
        log.Fatalf("failed to read schema: %v", err)
    }
    _, err = db.Exec(string(schema))
    if err != nil {
        log.Fatalf("failed to execute schema: %v", err)
    }

    // data.sqlを読み込み・実行
    data, err := os.ReadFile("internal/infrastructure/sqlite/data.sql")
    if err != nil {
        log.Fatalf("failed to read data: %v", err)
    }
    _, err = db.Exec(string(data))
    if err != nil {
        log.Fatalf("failed to execute data: %v", err)
    }

    // 実際に接続できるかを確認
    err = db.Ping()
    if err != nil {
        log.Fatal("Fail to connect to Database")
    }

    return db
}

internal/infrastructure/sqlite/

  • schema.sql
-- 一部SQLite特有の記法が必要なため注意 see; https://www.sqlite.org/docs.html
CREATE TABLE IF NOT EXISTS users(
    name VARCHAR(8) PRIMARY KEY
    , password VARCHAR(32)
    , age INT
);
  • data.sql
INSERT INTO users (
    name
    , password
    , age
) VALUES (
    'nob'
    , 'passwd'
    , 13
);