GO言語MySQLクエリ結果リストをカスタム構造体のスライスに変換しますか?
この質問では、MySQLクエリ(通常はまたは同様)からGO構造体のスライスに変換する方法について説明します。 最も効率的な方法では、[]interface{}
メソッドとともにdatabase/sql
パッケージを使用することが含まれます。 これにより、手動の解析が回避され、特に大規模な結果セットでパフォーマンスが大幅に向上します。 既にデータベース接続を確立していると仮定します。Scan
、users
、およびid
を備えたname
という名前のmysqlテーブルがあるとしましょう。 対応するGO structを作成します。データベース列名をstructフィールドにマッピングします。 次に、データを取得して変換しましょう:email
<code class="go">type User struct { ID int `db:"id"` Name string `db:"name"` Email string `db:"email"` }</code>このコードは各行を繰り返し、
structを作成し、行データをstructフィールドにスキャンし、db:"..."
スライスに追加します。 データベースリソースがリリースされるようにします。 エラー処理は非常に重要であり、後で詳細に説明されています。
<code class="go">rows, err := db.Query("SELECT id, name, email FROM users") if err != nil { // Handle error appropriately (see error handling section below) return nil, err } defer rows.Close() var users []User for rows.Next() { var user User err := rows.Scan(&user.ID, &user.Name, &user.Email) if err != nil { // Handle error (e.g., type mismatch) return nil, err } users = append(users, user) } if err := rows.Err(); err != nil { // Handle potential errors after iteration return nil, err } return users, nil</code>MySQLクエリの結果をGO構造スライスに効率的に変換するにはどうすればよいですか? これにより、マニュアルタイプの変換と文字列解析が回避されます。これは、大きなデータセットでは大幅に遅くなります。 データベース列を
タグを使用してstructフィールドに直接マッピングすると、User
users
の代替は、defer rows.Close()
db:"column_name"
タグは、標準的かつ最も効率的なアプローチです。 これは、データベース列をstructフィールドに明確にリンクします。Query
db.Query
反復後:ループ後にScan
エラー処理を組み込んだ例:rows.Scan
以上がMySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。