GoでSELECT *列を[]文字列に読み取る方法?

Barbara Streisand
リリース: 2024-11-10 20:30:03
オリジナル
285 人が閲覧しました

How to Read SELECT * Columns into a []string in Go?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート