データベースとして PostgreSQL を使用して Go lang を利用する場合、「github.com/lib/pq」 " ドライバーによりデータベース接続が有効になります。ただし、ネストされた JSON フィールドを含む複雑な構造体からデータベースにデータを手動で挿入するのは、フィールドと値の数が膨大であるため、面倒な場合があります。
幸いなことに、github. com/jmoiron/sqlx ライブラリは、NamedExec 関数を使用したソリューションを提供します。この関数を使用すると、(db タグを使用して) 注釈付きのフィールド名を持つ構造体を名前付きパラメーターとして渡すことができ、挿入プロセスが簡素化されます。
次の構造体について考えてみましょう:
<code class="go">type ApplyLeave1 struct { LeaveId int `db:"leaveid"` EmpId string `db:"empid"` SupervisorEmpId string `db:"supervisorid"` }</code>
この構造体をデータベース テーブルに挿入するには、次のコードを使用できます。
<code class="go">import ( _ "github.com/lib/pq" "github.com/jmoiron/sqlx" "log" ) // Define the database connection. db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable") if err != nil { log.Fatalln(err) } // Prepare the SQL query with named parameters. query := `INSERT INTO TABLENAME(leaveid, empid, supervisorid) VALUES(:leaveid, :empid, :supervisorid)` // Create an instance of the struct to be inserted. var leave1 ApplyLeave1 // Execute the query with the named parameters. _, err = db.NamedExec(query, leave1) if err != nil { log.Fatalln(err) }</code>
このアプローチにより、挿入プロセスが大幅に簡素化され、各フィールドと値を手動で指定する必要がなくなりました。
sqlx ライブラリは JSON 配列の挿入を直接サポートしていませんが、PostgreSQL の jsonb データ型を使用して JSON データを格納できます。 JSON 配列を jsonb 列に挿入するには、まず文字列に変換してから、sqlx クエリ ビルダーを使用して挿入します。
たとえば、JSON 配列フィールドを持つ次の構造体があるとします。
<code class="go">type ApplyLeave1 struct { LeaveId int `db:"leaveid"` EmpId string `db:"empid"` SupervisorEmpId string `db:"supervisorid"` Certificates []CertificateInfo `db:"certificates"` }</code>
次のコードを使用して、PostgreSQL データベースに挿入できます。
<code class="go">// Convert the JSON array to a string. certificatesJSON, err := json.Marshal(leave1.Certificates) if err != nil { log.Fatalln(err) } // Prepare the SQL query with named parameters. query := `INSERT INTO TABLENAME(leaveid, empid, supervisorid, certificates) VALUES(:leaveid, :empid, :supervisorid, :certificates)` // Create an instance of the struct to be inserted. var leave1 ApplyLeave1 // Execute the query with the named parameters. _, err = db.NamedExec(query, map[string]interface{}{ "leaveid": leave1.LeaveId, "empid": leave1.EmpId, "supervisorid": leave1.SupervisorEmpId, "certificates": string(certificatesJSON), }) if err != nil { log.Fatalln(err) }</code>
このアプローチにより、便利で効率的な方法を使用して、JSON 配列を含む複雑な構造体を PostgreSQL データベースに挿入できます。
以上がsqlx を使用して、ネストされた JSON フィールドを持つ Go 構造体を PostgreSQL データベースに挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。