Go言語でデータベース操作関数を実装する方法

WBOY
リリース: 2023-08-26 17:42:23
オリジナル
966 人が閲覧しました

Go言語でデータベース操作関数を実装する方法

Go 言語でデータベース操作関数を実装する方法

効率的で簡潔なプログラミング言語である Go 言語は、サーバー バックエンドの開発やデータベース操作に非常に適しています。実際のアプリケーション開発では、データベースの操作が欠かせません。今回はGo言語でデータベース操作機能を実装する方法と、よくある操作例を紹介します。

1. データベース接続

Go 言語では、サードパーティのライブラリを使用してさまざまな種類のデータベースに接続できます。その中で最もよく使われるのは、標準ライブラリの「database/sql」パッケージと、「go-sqlite3」「mysql」「postgres」などの各種データベースドライバーです。

まず、必要なパッケージをインポートする必要があります:

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql" // MySQL驱动
)
ログイン後にコピー

次に、「sql.Open」関数を使用してデータベースに接続できます:

db, err := sql.Open("mysql", "user:password@tcp(localhost:8889)/mydb")
if err != nil {
    log.Fatal(err)
}
defer db.Close()
ログイン後にコピー

上記のコードでは、MySQL ドライバーを使用し、データベース接続のアドレスと資格情報を指定しました。接続が成功すると、「db」オブジェクトを通じてさまざまなデータベース操作を実行できます。

2. SQL ステートメントの実行

一般に、データベース操作には主にクエリ、挿入、更新、削除などの機能が含まれます。以下に、一般的なデータベース操作の例をいくつか示します。

  1. Query data
rows, err := db.Query("SELECT * FROM users")
if err != nil {
    log.Fatal(err)
}
defer rows.Close()

for rows.Next() {
    var id int
    var name string
    err := rows.Scan(&id, &name)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(id, name)
}

err = rows.Err()
if err != nil {
    log.Fatal(err)
}
ログイン後にコピー

上記のコードでは、「db.Query」関数を通じて SELECT ステートメントを実行し、「rows.Next」と「rows .Next」を渡しました。 「スキャン」してクエリ結果を取得します。クエリ結果の使用後にリソースが確実に解放されるようにするには、「defer rows.Close()」を使用する必要があることに注意してください。

  1. データの挿入
stmt, err := db.Prepare("INSERT INTO users(name) VALUES(?)")
if err != nil {
    log.Fatal(err)
}
defer stmt.Close()

res, err := stmt.Exec("John")
if err != nil {
    log.Fatal(err)
}

id, err := res.LastInsertId()
if err != nil {
    log.Fatal(err)
}

fmt.Println("Inserted record ID:", id)
ログイン後にコピー

上記のコードでは、「db.Prepare」関数を使用して INSERT ステートメントを準備し、「stmt.Exec」を使用して挿入操作。次に、「res.LastInsertId」を通じて、挿入されたレコードに対応する ID を取得できます。

  1. データの更新
stmt, err := db.Prepare("UPDATE users SET name=? WHERE id=?")
if err != nil {
    log.Fatal(err)
}
defer stmt.Close()

res, err := stmt.Exec("John Smith", 1)
if err != nil {
    log.Fatal(err)
}

rowsAffected, err := res.RowsAffected()
if err != nil {
    log.Fatal(err)
}

fmt.Println("Rows affected:", rowsAffected)
ログイン後にコピー

上記のコードでは、「db.Prepare」関数を通じて UPDATE ステートメントを準備し、「stmt.Exec」を使用して更新を実行しました。操作する。次に、「res.RowsAffected」を介して影響を受ける行の数を取得できます。

  1. データの削除
stmt, err := db.Prepare("DELETE FROM users WHERE id=?")
if err != nil {
    log.Fatal(err)
}
defer stmt.Close()

res, err := stmt.Exec(1)
if err != nil {
    log.Fatal(err)
}

rowsAffected, err := res.RowsAffected()
if err != nil {
    log.Fatal(err)
}

fmt.Println("Rows affected:", rowsAffected)
ログイン後にコピー

上記のコードでは、「db.Prepare」関数を通じて DELETE ステートメントを準備し、「stmt.Exec」を使用して削除を実行しました。操作する。同様に、「res.RowsAffected」を通じて影響を受ける行の数を取得できます。

3. トランザクション処理

実際のアプリケーション開発において、トランザクション処理は非常に重要な機能です。 Go 言語では、「db.Begin」を使用してトランザクションを開始し、「tx.Commit」を使用してトランザクションをコミットできます。トランザクション処理中にエラーが発生した場合、「tx.Rollback」を使用してトランザクションをロールバックできます。

tx, err := db.Begin()
if err != nil {
    log.Fatal(err)
}

stmt, err := tx.Prepare("INSERT INTO users(name) VALUES(?)")
if err != nil {
    tx.Rollback()
    log.Fatal(err)
}
defer stmt.Close()

_, err = stmt.Exec("John")
if err != nil {
    tx.Rollback()
    log.Fatal(err)
}

err = tx.Commit()
if err != nil {
    log.Fatal(err)
}
ログイン後にコピー

上記のコードでは、「db.Begin」を使用してトランザクションを開始し、トランザクション内で挿入操作を実行します。エラーが発生した場合は、「tx.Rollback」を使用してトランザクションをロールバックし、それ以外の場合は、「tx.Commit」を使用してトランザクションをコミットします。

概要:

この記事の導入部を通じて、Go 言語でデータベース操作関数を実装する方法を学び、いくつかの一般的なデータベース操作の例を示しました。 「database/sql」パッケージと適切なデータベース ドライバーを使用すると、さまざまなタイプのデータベースを簡単に接続できることに注意してください。この記事が Go 言語でデータベース操作を実行するのに役立つことを願っています。

以上がGo言語でデータベース操作関数を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート