やりたいこと
- sqlxを使って、ネストした構造体にScanしたい。
環境
- golang
- sqlx
コード
下記のような構造体をSQLで取得した際に、sqlxでStructScanしたい。
go
1type Test struct { 2 Test1 []Test1 3} 4 5type Test1 struct { 6 ID int 7 Name string 8 Test2 []Test2 9} 10 11type Test2 struct { 12 ID int 13 Name string 14 Test3 []Test3 15} 16 17type Test3 struct { 18 ID int 19 Name string 20} 21
実際の処理
go
1// サンプルコードなので、errは握りつぶしています 2rows, _ := conn.NamedQuery( 3` 4// DBから3つのテーブル (Test1, Test2, Test3)をJoinした値を返すSQL 5` 6) 7 8test := []*Test{} 9// Test1構造体にTest1.IDとTest1.Nameを、Test2構造体にTest2.IDとTest2.Nameを、Test3構造体にTest3.IDとTest3.NameをScanしたい 10_ = sqlx.StructScan(rows, &test) 11
補足
Test1, Test2, Test3それぞれScanする方法も考えたのですが、よりドライに書きたいと思っています。
一括でScanする方法はないのでしょうか?
よろしくお願いいたします!
「1+N問題」を検索してみましょう。この問題の解決方法はいくつかトレードオフがあって、アプリの要件によって対処方法は変わります。
sqlx(あまり詳しいわけではないので参考程度に)はそれを自動解決するのではなくSliceScan機能は用意しているのでScannerインターフェース実装を各自頑張ってくださいというスタンスのように見えます。
コメントありがとうございます!
「1+N問題」について調べて、https://qiita.com/muroya2355/items/d4eecbe722a8ddb2568b#n1%E7%8A%B6%E6%85%8B
を参考に実装して解決できました!(構造体の設計を変更しました)
色々調べたところ、おっしゃった通り sqlxは自動解決しないみたいですね。

回答1件
あなたの回答
tips
プレビュー