[Go] Gorpを使ってPostgreSQLにアクセスする

Goでデータベースにアクセスする方法の紹介です。
今回はPostgreSQLにアクセスするための方法です。

事前準備

DBにアクセスするために、いくつかモジュールを入れます。

$ go get github.com/go-gorp/gorp
$ go get github.com/lib/pq

gorpとPostgreSQLのドライバーのpqを用意します。

サンプルコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
type Comment struct {
    Id      int64     `db:"id,primarykey,autoincrement"`
    Name    string    `db:"name,notnull,size:200"`
    Text    string    `db:"text,notnull,size:400"`
    Created time.Time `db:"created,notnull"`
    Updated time.Time `db:"updated,notnull"`
}
 
func main() {
    dsn := os.Getenv("DSN")
    fmt.Printf("DSN=%s\n", dsn)
    db, err := sql.Open("postgres", dsn)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
 
    dbmap := &gorp.DbMap{Db: db, Dialect: gorp.PostgresDialect{}}
    dbmap.AddTableWithName(Comment{}, "comments")
    err = dbmap.CreateTablesIfNotExists()
 
    newComment := Comment{Name: "Azusa", Text: "にゃ〜"}
    err = dbmap.Insert(&newComment)
    if err != nil {
        log.Fatal(err)
        return fmt.Sprintf("Error :%v", err)
    }
 
    var comments []Comment
    dbmap.Select(&comments, "SELECT * FROM comments")
    fmt.Printf("select %v", comments)
}

DSNは以下の書式です。
サンプルコードは環境変数で定義しています。

DSN=postgres://{DBのユーザ名}:{パスワード}@{DBサーバのアドレス}:{DBのポート番号}/{テーブル名}?sslmode=disable

CreateTablesIfNotExistsを使うと、DBにテーブルがない場合に作成してくれます。
type Comment struct ... でテーブルを定義していますが、db:"name,notnull,default:'Yui',size:200"のようにdefaultを指定していたら、Insertした時にNameを指定していても毎回defaultになってしまいました。
(定義の仕方が悪かっただけかも??)
ひとまずDBを操作する事はできるので詳しい事はもっと触るようになった時に調べます。

サンプルコード

サンプルコードはGithubに上げてあります。

参考

  • みんなのGo言語 改訂2版 (技術評論社)

0 件のコメント :

コメントを投稿