Go では、データベース クエリの結果をマップのスライスに変換するのが難しい場合があります。ただし、この制限を克服することは可能です。
従来のアプローチ
従来のアプローチには、要求された列数に一致する特定の数のパラメーターに行をスキャンすることが含まれます。 。この方法は非効率的で柔軟性に欠ける可能性があります。
sqlx の使用
sqlx ライブラリは、より効率的なソリューションを提供します。 SQLX を使用すると、行をマップのスライスに簡単に変換できます。次のコードは、このプロセスを示しています。
package main import ( "context" "database/sql" "fmt" _ "github.com/lib/pq" // PostgreSQL driver "github.com/jmoiron/sqlx" ) type Place struct { Telcode int Name string Country string Continent string Province string Region string } func main() { db, err := sql.Open("postgres", "user=postgres password=mypassword host=localhost port=5432 dbname=mydatabase sslmode=disable") if err != nil { fmt.Printf("Error connecting to database: %v", err) return } sqlxDB := sqlx.NewDb(db, "postgres") places := []map[string]interface{}{} err = sqlxDB.Select(&places, "SELECT * FROM place ORDER BY telcode ASC") if err != nil { fmt.Printf(err) return } fmt.Printf("Places: %v", places) }
この例では、places はマップのスライスであり、各マップはデータベース テーブル内の行を表します。マップのキーは列名で、マップの値は対応する列の値です。
マップ構造のカスタマイズ
によって返されるマップの構造をカスタマイズできます。 sqlx。たとえば、マップのスライスを、前に定義した Place 構造体のようなカスタム構造体のスライスに置き換えることができます。このアプローチはより効率的で、型アサーションの必要がなくなります。
特に大規模なデータセットを扱う場合、sqlx アプローチは従来のデータベース/SQL アプローチよりも効率的であることを覚えておいてください。
以上がGo でデータベース行をマップに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。