英文:
Is there any way other than scan when reading data from db.query?
问题
当我使用Scan
函数时,我必须事先将所有变量写入Scan
函数中。我需要一种解决方案,可以使用类似sprintf
的方式来使用数据。
有没有一种方法可以在不定义变量的情况下访问数据?
例如:
row["unit_name"]
或者
unit_name, unit_position string
val := fmt.Sprintf("%s, %s", unit_name, unit_position_name)
row[val]
英文:
When I use scan I have to write all the variables into the scan beforehand. i need a solution where i can use data using things like sprintf
Is there a way I can access the data without defining a variable?
func (dbs *item) ReadQuery() {
var (
unit_name, unit_position_name string
)
rows, err := db.Query(dbs.query)
for rows.Next() {
rows.Scan(&unit_name, &unit_position_name)
if err != nil {
log.Fatal(err)
}
}
}
for example;
row["unit_name"]
or
unit_name,unit_position string
val:= fmt.Sprintf("%s , %s",unit_name,unit_position_name)
row[val]
答案1
得分: 2
以下是翻译好的内容:
这是如何在不显式声明行值变量的情况下扫描一行的方法。
为值创建一个切片。使用这些值的地址创建一个切片。扫描到这些地址。
func example(db *sql.DB, query string) {
rows, err := db.Query(query)
if err != nil {
log.Fatal(err)
}
cols, err := rows.Columns()
if err != nil {
log.Fatal(err)
}
addrs := make([]interface{}, len(cols))
for rows.Next() {
values := make([]interface{}, len(cols))
for i := range addrs {
addrs[i] = &values[i]
}
err := rows.Scan(addrs...)
if err != nil {
log.Fatal(err)
}
// 变量 values 包含了行的值。
// 这是一个使用 values 的示例。
// 用你自己的代码替换 for 循环来处理行。
for i := range cols {
fmt.Printf("%s: %v\n", cols[i], values[i])
}
}
}
希望对你有帮助!
英文:
Here's how to scan a row without explicitly declaring a variable for value in the row.
Make a slice for the values. Make a slice with the address of those values. Scan to the addresses.
func example(db *sql.DB, query string) {
rows, err := db.Query(query)
if err != nil {
log.Fatal(err)
}
cols, err := rows.Columns()
if err != nil {
log.Fatal(err)
}
addrs := make([]any, len(cols))
for rows.Next() {
values := make([]any, len(cols))
for i := range addrs {
addrs[i] = &values[i]
}
rows.Scan(addrs...)
if err != nil {
log.Fatal(err)
}
// The variable values contains the row values.
// Here's an example of how to use the values.
// Replace the for loop with your code to
// process the row.
for i := range cols {
fmt.Printf("%s: %v\n", cols[i], values[i])
}
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论