リフレクションを使用した可変引数スキャン関数の呼び出し
リフレクションを使用して Rows.Scan() 関数を呼び出すには、リフレクションの力を利用できます。可変数のポインターを関数に渡します。これは、データベース クエリ結果の値をスライスに埋め込みたい場合に特に便利です。
実装手順
サンプルコード
package main import ( "fmt" "reflect" "database/sql" ) func main() { // Open a database connection. db, _ := sql.Open("postgres", "user=postgres dbname=database password=password") // Query the database. rows, _ := db.Query("SELECT * FROM table_name") // Get the column names. columns, _ := rows.Columns() columnCount := len(columns) // Create slices to store data points and pointers. data := make([]interface{}, columnCount) dataPtrs := make([]interface{}, columnCount) // Obtain a slice of pointers. pointers := reflect.ValueOf(dataPtrs) // Obtain a slice of addresses. addresses := pointers.Addr() // Fill the data points by calling Rows.Scan(). rows.Scan(addresses...) // Print the data points. for i := 0; i < columnCount; i++ { fmt.Println(columns[i], data[i]) } }
これコード スニペットは、リフレクションを使用して、可変数のポインターで Rows.Scan() 関数を呼び出す方法を示しています。クエリ結果から列名を動的に取得し、データ ポイントとポインターを格納するスライスを作成します。リフレクションを使用してアドレスのスライスを取得すると、それを rows に渡すことができます。スキャンして、それに応じてデータ ポイントを埋めます。
以上がGo でリフレクションを使用して可変個引数の `Rows.Scan()` 関数を呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。