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処理をしてみよう〜