Go言語のDB連携実例(PostgreSQL)

WordPress

WebAPIとの連携に加えて、データベースとも連携するようにアプリケーションを拡張することができます。Go言語には標準の database/sql パッケージがあり、さまざまなデータベースドライバに対応しています。ここでは、PostgreSQLとの連携例を示します。

  1. PostgreSQLドライバのインストール

まず、PostgreSQLドライバである github.com/lib/pq をインストールします。

go get github.com/lib/pq
  1. データベース接続用の構造体を定義

データベース接続情報を保持する構造体を定義します。

type DB struct {
SQL *sql.DB
}
  1. DBに接続する関数を作成

データベースに接続する関数を作成します。

func NewDB() (*DB, error) {
connStr := "user=postgres dbname=mydb sslmode=disable"
db, err := sql.Open("postgres", connStr)
if err != nil {
return nil, err
}
return &DB{SQL: db}, nil
}
  1. メインロジックを更新

メインロジックを次のように更新します。

package main

import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"

_ "github.com/lib/pq" // PostgreSQLドライバのインポート
)

type Response struct {
Status string `json:"status"`
Message string `json:"message"`
}

func main() {
// データベースに接続
db, err := NewDB()
if err != nil {
log.Fatalf("Failed to connect to database: %v", err)
}
defer db.SQL.Close()

// WebAPIからデータを取得
url := "https://api.example.com/data"
resp, err := http.Get(url)
if err != nil {
log.Fatalf("Error: %v", err)
}
defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalf("Error: %v", err)
}

var response Response
err = json.Unmarshal(body, &response)
if err != nil {
log.Fatalf("Error: %v", err)
}

// レスポンスデータをデータベースに保存
query := `INSERT INTO responses (status, message) VALUES ($1, $2)`
_, err = db.SQL.Exec(query, response.Status, response.Message)
if err != nil {
log.Fatalf("Error: %v", err)
}

fmt.Println("Data saved to database successfully!")
}

このコードでは、PostgreSQLデータベースに接続し、WebAPIからのレスポンスデータを responses テーブルに保存しています。

  1. データベーステーブルの作成

PostgreSQLデータベースで responses テーブルを作成します。

CREATE TABLE responses (
id SERIAL PRIMARY KEY,
status TEXT NOT NULL,
message TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  1. プログラムの実行
go run main.go

プログラムを実行すると、WebAPIからデータを取得し、データベースに保存されます。

saved to database successfully!

PostgreSQLデータベースに接続し、WebAPIからのレスポンスデータを保存できるようになりました。必要に応じて、追加の CRUD 操作を実装することもできます。

この例では、単一のデータベース接続を使用していますが、プロダクション環境ではデータベース接続プールを使用することが推奨されます。また、エラー処理やトランザクション処理なども適切に行う必要があります。

コメント

タイトルとURLをコピーしました