Edited at

goでpostgresを使ってみた

More than 1 year has passed since last update.


はじめに

 今回はGoでpostgresを使ってみようと思い自分が調べて得た情報を備忘録として記事にします。postgresの環境構築は

 https://qiita.com/_daisuke/items/13996621cf51f835494b

がとてもわかりやすいのでここを参照してください。環境構築ができたらpostgresを起動しましょう。起動は以下のコマンドでできます。

$ postgres -D /usr/local/var/postgres

また紹介するサンプルコードではgormパッケージを使用するため以下のコマンドを実行してください。

$ go get github.com/jinzhu/gorm

$ go get github.com/lib/pq


サンプルコード


main.go

package main

import (
"fmt"

"github.com/jinzhu/gorm"
_ "github.com/lib/pq"
)

type User struct {
ID int64 `gorm:"primary_key" json:"id"`
Name string `json:"name"`
}

type Users []User

func main() {
db, err := gorm.Open("postgres", "user=username password=pw dbname=testdb sslmode=disable")
if err != nil {
panic(err)
}
defer db.Close()
db.AutoMigrate(User{})
var user = User{Name: "testname"}
db.NewRecord(user)
db.Create(&user)
db.Save(&user)

var users = Users{}
db.Find(&users) // SELECT * FROM users;
fmt.Println(users)
}


 このサンプルは、Insertしたデータを取得して、取得した結果を出力するプログラムです。

 gorm.Openの第二引数ではユーザー名、パスワード、データベースの名前、sslmodeを指定します。ユーザー名は今回デフォルトを使用するため$ psql postgresで起動したインタプリタでpostgres=# \lを実行して得られたDB一覧のOwnerに書いてある名前を使用します。

 指定したデータベースは事前に作成してください。データベースの作成は、$ createdb dbnameでできます。


実行結果

$ go run main.go

[{1 testname}]

 実行結果からInsertした情報を取得して出力できていることがわかります。今度はpostgres内の結果をみてみます。

$ psql test

psql(10.2)
Type "help" for help.

test=# select * from users;
id | name
----+----------
1 | testname
(1 row)

 この結果からDBにデータが格納されていることがわかります。