WebAPIとの連携に加えて、データベースとも連携するようにアプリケーションを拡張することができます。Go言語には標準の database/sql
パッケージがあり、さまざまなデータベースドライバに対応しています。ここでは、PostgreSQLとの連携例を示します。
- PostgreSQLドライバのインストール
まず、PostgreSQLドライバである github.com/lib/pq
をインストールします。
go get github.com/lib/pq
- データベース接続用の構造体を定義
データベース接続情報を保持する構造体を定義します。
type DB struct {
SQL *sql.DB
}
- 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
}
- メインロジックを更新
メインロジックを次のように更新します。
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
テーブルに保存しています。
- データベーステーブルの作成
PostgreSQLデータベースで responses
テーブルを作成します。
CREATE TABLE responses (
id SERIAL PRIMARY KEY,
status TEXT NOT NULL,
message TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
- プログラムの実行
go run main.go
プログラムを実行すると、WebAPIからデータを取得し、データベースに保存されます。
saved to database successfully!
PostgreSQLデータベースに接続し、WebAPIからのレスポンスデータを保存できるようになりました。必要に応じて、追加の CRUD 操作を実装することもできます。
この例では、単一のデータベース接続を使用していますが、プロダクション環境ではデータベース接続プールを使用することが推奨されます。また、エラー処理やトランザクション処理なども適切に行う必要があります。
コメント