Go で SELECT * 列を []string に読み取る際の複雑さ
データ処理における一般的なタスクは、データベース テーブルから行を取得することです。便利な形式で保存します。 Go では、database/sql パッケージを使用してデータベースとインターフェースできます。ただし、不明な型の列が可変数存在する場合、問題が発生する可能性があります。
sql.Rows 型はクエリの結果へのアクセスを提供しますが、その Scan メソッドは型付きフィールドに値が入力されることを期待します。値を文字列のスライス ([]string) に直接変換するのは簡単ではありません。
解決策: インターフェイス スライスの利用
この問題に対処するには、文字列スライス内の各文字列を指すインターフェース スライス ([]interface{})。これには、一時スライスの割り当てと、文字列スライス内の対応する要素を指すように各要素を設定することが含まれます。
コード例:
rawResult := make([][]byte, len(cols)) result := make([]string, len(cols)) dest := make([]interface{}, len(cols)) // A temporary interface{} slice for i, _ := range rawResult { dest[i] = &rawResult[i] // Put pointers to each string in the interface slice }
インターフェイス スライスが作成されたら、準備ができたら、それを使用して行をスキャンできます。
行のスキャンと変換文字列
for rows.Next() { err = rows.Scan(dest...) if err != nil { fmt.Println("Failed to scan row", err) return } for i, raw := range rawResult { if raw == nil { result[i] = "\N" } else { result[i] = string(raw) } } fmt.Printf("%#v\n", result) }
このアプローチにより、変数の数と列の型に対応して、列の値を文字列スライスに直接読み取ることができます。
以上がGoでSELECT *列を[]文字列に読み取る方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。