データベースへの接続

データベースへの接続

データベースに接続するには、まずデータベースのドライバーをImportする必要があります。

import _ "github.com/go-sql-driver/mysql"

GORMには各ドライバーのImportを楽にするためのラッパーがいくつか用意されています。例えばMySQLドライバーをImportする場合は、下記のように書けます。

import _ "github.com/jinzhu/gorm/dialects/mysql"
// import _ "github.com/jinzhu/gorm/dialects/postgres"
// import _ "github.com/jinzhu/gorm/dialects/sqlite"
// import _ "github.com/jinzhu/gorm/dialects/mssql"

サポートされているデータベース

MySQL

注意

time.Timeを正しく扱うため、parseTimeをパラメータとして渡してあげる必要があります。 (対応している他のパラメータ)

UTF-8の完全な対応のため、charset=utf8charset=utf8mb4に変更する必要があります。 詳しくは こちらの記事 を参照してください。

import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)

func main() {
db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
defer db.Close()
}

If you want to specify the host, you need to use (). Example:

user:password@(localhost)/dbname?charset=utf8&parseTime=True&loc=Local

PostgreSQL

import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/postgres"
)

func main() {
db, err := gorm.Open("postgres", "host=myhost port=myport user=gorm dbname=gorm password=mypassword")
defer db.Close()
}

Sqlite3

NOTE:パスの代わりに:memory:の指定も可能です。 この場合、sqliteに対してシステムのメモリ上に一時的なデータベースを利用するように指定します。 GORMの機能を使ってメモリー上の実際のDBを叩くことになるので、テストの時に便利です。

import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
)

func main() {
db, err := gorm.Open("sqlite3", "/tmp/gorm.db")
defer db.Close()
}

SQL Server

Get started with SQL Server, Dockerを使ってMacLinuxで実行することもできます。

import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mssql"
)

func main() {
db, err := gorm.Open("mssql", "sqlserver://username:password@localhost:1433?database=dbname")
defer db.Close()
}

サポートされていないデータベース

GORMは上記4つのデータベースを公式サポートしています。サポートされていないデータベース用にDialectを書くことも可能です。GORM Dialectsを参照してください。