ホームページ  >  記事  >  バックエンド開発  >  Go でデータベースを使用するにはどうすればよいですか?

Go でデータベースを使用するにはどうすればよいですか?

PHPz
PHPzオリジナル
2023-05-10 17:48:061384ブラウズ

Web アプリケーションやその他の複雑なアプリケーションがインターネット上で広く普及するにつれて、データベースは不可欠な部分になりました。 Go は、Web アプリケーションやその他のシステム開発に使用できる人気のあるプログラミング言語です。この記事では、Go でデータベースを使用する方法を説明します。

  1. データベースの選択

データベースの使用を開始する前に、まずアプリケーションに適したデータベースを選択する必要があります。 Go は、MySQL、PostgreSQL、MongoDB などの多くの一般的なデータベースをサポートしています。 ORM (オブジェクト リレーショナル マッパー) ライブラリまたは SQL ジェネレーター ライブラリを使用して、データベースの対話を簡素化することもできます。 ORM ライブラリはオブジェクトをデータベース内のテーブルにマップするライブラリですが、SQL ジェネレーター ライブラリは SQL クエリを作成およびクエリするためのライブラリです。データベースの選択は、アプリケーションのニーズと、さまざまなデータベースの長所と短所の理解に基づいて行う必要があります。

  1. データベース ドライバーのインストール

データベースを選択したら、次のステップはデータベース ドライバーをインストールすることです。 Go にはさまざまなデータベース用のドライバーがあり、Go の標準ライブラリ データベース/SQL またはより高レベルの機能を備えた外部ライブラリのドライバーを使用できます。データベースの公式ドキュメントからドライバーの正しい情報を入手することが重要です。選択したデータベースに応じて要件が異なるため、インストールプロセス中に注意すべき詳細に注意してください。

  1. 接続の確立

データベースを使用する前に、データベースへの接続を確立する必要があります。 Go では、次のコードを使用して MySQL データベースへの接続を作成できます:

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/mydb")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    err = db.Ping()
    if err != nil {
        panic(err.Error())
    }

    fmt.Println("Connection established")
}

この例では、sql.Open() 関数を使用して MySQL データベース接続を開きます。 。 Open() 関数では、MySQL ドライバー (この場合は github.com/go-sql-driver/mysql) を使用して、接続するデータベース名を Go に伝えます。 、ユーザー名、パスワード、アドレス。次に、db.Ping() コマンドを使用してデータベースへの接続が成功したかどうかをテストし、接続が成功したことを確認します。最後に、defer db.Close() を使用して、プログラムが終了する前にデータベース接続が確実に閉じられるようにします。

  1. クエリの実行

データベースへの接続が確立されたら、データベースの使用を開始できます。クエリ ステートメントを実行するには、db.Query() 関数または db.QueryRow() 関数を使用できます。 db.Query() 関数は複数行を返すクエリの実行に使用され、db.QueryRow() 関数は単一行の結果を返すクエリの実行に使用されます。

以下はクエリを実行する例です:

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/mydb")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    rows, err := db.Query("SELECT * FROM mytable")
    if err != nil {
        panic(err.Error())
    }
    defer rows.Close()

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

    err = rows.Err()
    if err != nil {
        panic(err.Error())
    }
}

上記のコード例では、まず db.Query() を使用して SELECT ステートメントを実行し、結果は rows 変数に格納されます。次に、rows.Close() 関数を使用して結果セットを閉じます。次に、rows.Next() を使用して結果セットの各行をループし、rows.Scan() 関数を使用して結果を変数と照合します。最後に、rows.Err() 関数を使用して、潜在的なエラーを処理します。

  1. 挿入、更新、削除操作を実行する

データベースでは、クエリ操作に加えて、挿入、更新、削除操作もサポートされています。 Go でこれらの操作を実行することはクエリ操作と似ており、異なる関数を使用する必要があります。

挿入操作を実行するには、次のコードを使用できます:

res, err := db.Exec("INSERT INTO mytable (name) VALUES (?)", "John")
if err != nil {
    panic(err.Error())
}
lastInsertID, err := res.LastInsertId()
if err != nil {
    panic(err.Error())
}
fmt.Println("Last inserted ID:", lastInsertID)

更新操作を実行するには、次のコードを使用できます:

res, err = db.Exec("UPDATE mytable SET name = ? WHERE id = ?", "John Doe", 1)
if err != nil {
    panic(err.Error())
}
rowsAffected, err := res.RowsAffected()
if err != nil {
    panic(err.Error())
}
fmt.Println("Rows affected:", rowsAffected)

削除を実行するには

res, err = db.Exec("DELETE FROM mytable WHERE id = ?", 1)
if err != nil {
    panic(err.Error())
}
rowsAffected, err = res.RowsAffected()
if err != nil {
    panic(err.Error())
}
fmt.Println("Rows affected:", rowsAffected)
  1. トランザクションの使用

データベース トランザクションを使用することは、変更を加えるときにデータベースの整合性を確保するために非常に重要です。 Go では、次のコードを使用してトランザクションを使用できます。

tx, err := db.Begin()

stmt, err := tx.Prepare("INSERT INTO mytable (name) VALUES (?)")
if err != nil {
    tx.Rollback()
    panic(err.Error())
}

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

stmt, err = tx.Prepare("UPDATE mytable SET name = ? WHERE id = ?")
if err != nil {
    tx.Rollback()
    panic(err.Error())
}

_, err = stmt.Exec("John Doe", 1)
if err != nil {
    tx.Rollback()
    panic(err.Error())
}

err = tx.Commit()
if err != nil {
    panic(err.Error())
}

上記のコードでは、まず db.Begin() 関数を使用してトランザクションを開始します。次に、tx.Prepare() 関数を使用して、実行する SQL ステートメントを準備します。次に、stmt.Exec() 関数を使用して SQL ステートメントを実行します。すべての操作が実行された後、tx.Commit() 関数を使用してトランザクションをコミットします。いずれかの操作が失敗した場合は、tx.Rollback() 関数を使用してすべての変更をロールバックします。

  1. 参考

この記事では、Go でデータベースを使用する方法を紹介しました。より高度なデータベース操作の場合は、ORM または SQL ジェネレーター ライブラリを使用して対話を容易にすることができます。特定のデータベースの使用方法の詳細については、関連する公式ドキュメントと Go ライブラリのドキュメントを参照してください。以下にいくつかの参考文献を示します。

  • Golang 用データベース/SQL: https://golang.org/pkg/database/sql/
  • Go MySQL ドライバー: https:// github. com/go-sql-driver/mysql
  • Go PostgreSQL ドライバー: https://github.com/lib/pq
  • MongoDB Go ドライバー: https://github .com/mongodb/モンゴゴードライバー

以上がGo でデータベースを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。