rows.Next()为什么给我标红
时间: 2023-08-08 11:06:43 浏览: 117
`rows.Next()` 标红的原因可能是你没有导入 `database/sql` 包和 `github.com/go-sql-driver/mysql` 包。
你可以在代码中加入以下导入语句:
```go
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
```
另外,为了避免出现 `rows.Next()` 标红的情况,你可以将遍历 `rows` 的代码部分封装成一个函数,代码如下:
```go
// 遍历MySQL查询结果,将每一行数据传递给callback函数处理
func forEachRow(rows *sql.Rows, callback func(...interface{}) error) error {
defer rows.Close()
columns, err := rows.Columns()
if err != nil {
return err
}
values := make([]interface{}, len(columns))
valuePtrs := make([]interface{}, len(columns))
for rows.Next() {
for i := range columns {
valuePtrs[i] = &values[i]
}
if err := rows.Scan(valuePtrs...); err != nil {
return err
}
if err := callback(values...); err != nil {
return err
}
}
return nil
}
```
使用上述函数,遍历 `rows` 的代码可以改为:
```go
err = forEachRow(rows, func(values ...interface{}) error {
id := values[0].(int)
name := values[1].(string)
age := values[2].(int)
// 将一行数据存储到Redis中
key := fmt.Sprintf("t_user:%d", id)
err = client.HSet(key, "id", id).Err()
if err != nil {
return err
}
err = client.HSet(key, "name", name).Err()
if err != nil {
return err
}
err = client.HSet(key, "age", age).Err()
if err != nil {
return err
}
return nil
})
if err != nil {
log.Fatal(err)
}
```
这样可以避免出现 `rows.Next()` 标红的问题。
阅读全文