Go言語コワクナイ 第4話

〜gormを使ってpostgresに接続してみよう〜

前回のあらすじ

/hello/controller/hello_controller.goに

package controller

// HelloController hello controller
type HelloController struct{}

func NewHelloController(e *echo.Echo) {
    handler := &HelloController{}
    e.GET("/", handler.Hello)
}

// Hello hello world
func (c *HelloController) Hello(ctx echo.Context) error {
    return ctx.JSON(200, "Hello, World!")
}

を記述して


main.goで

e := echo.New()
controller.NewHelloController(e)

でcontrollerの処理を実装することができました


今回はgormを使用してpostgresへ接続をしてみましょう


まずDBを用意します

createdb db名

次にdb.goを作成します

mkdir db
touch db/db.go

db.goを編集していきましょう

package db

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

// Init connection postgres DB.
func Init() *gorm.DB {
    url := "postgres://user:pass@host:port/db_name?sslmode=disable"
    db, err := gorm.Open("postgres", url)
    if err != nil {
        panic(err)
    }
    return db
}

まず接続するDBのpackageをimportします 今回はpostgresを使用するので

"github.com/jinzhu/gorm/dialects/postgres" // import postgres

をimportします


gorm.Open("DBの種類", DatabaseURL)

でDBへ接続します DB接続の情報は1つ目の返り値で返却されます


main.goでInitを実行すればDBへ接続ができます

func main() {
    database := db.Init()
}

データ取得してDBに接続できているか確認しましょう

mkdir user
touch user/user.go

user/user.go

package user

import "time"

// User user struct
type User struct {
    ID        int `gorm:"primary_key"`
    Email     string
    Password  string
    LastName  string
    FirstName string
    CreatedAt time.Time
    UpdatedAt time.Time
    DeletedAt *time.Time
}

main.go

database := db.Init()
database.AutoMigrate(
    &user.User{},
)
database.LogMode(true)
u := []*user.User{}
database.Model(&u).Find(&u)

実行してみましょう

go build
./echo-sever

このようなログが出力されれば成功です

(/****/****/go/src/github.com/y-ogura/echo-server/main.go:18)
[2019-01-23 10:13:00]  [3.29ms]  SELECT * FROM "users"  WHERE "users"."deleted_at" IS NULL
[0 rows affected or returned ]

次回

〜gormを使ってCRUD処理をしてみよう〜