golang mysql 使用interface{}取值
时间: 2024-03-05 22:06:35 浏览: 20
在 Golang 中使用 MySQL 数据库时,可以使用 `interface{}` 类型的变量来获取查询结果。以下是一个示例代码:
```go
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/database")
if err != nil {
panic(err.Error())
}
defer db.Close()
rows, err := db.Query("SELECT name, age FROM users")
if err != nil {
panic(err.Error())
}
defer rows.Close()
cols, err := rows.Columns()
if err != nil {
panic(err.Error())
}
values := make([]interface{}, len(cols))
valuePtrs := make([]interface{}, len(cols))
for rows.Next() {
for i, _ := range cols {
valuePtrs[i] = &values[i]
}
err = rows.Scan(valuePtrs...)
if err != nil {
panic(err.Error())
}
for i, col := range cols {
val := values[i]
fmt.Printf("%s: %v\n", col, val)
}
}
err = rows.Err()
if err != nil {
panic(err.Error())
}
}
```
在上述代码中,使用 `rows.Columns()` 方法获取查询结果的列名,使用 `make()` 方法创建一个 `interface{}` 类型的变量切片 `values`,用于存储查询结果。然后,使用 `make()` 方法再创建一个 `interface{}` 类型的指针切片 `valuePtrs`,用于存储 `values` 切片中每个元素的地址。在循环中,使用 `rows.Scan()` 方法将查询结果赋值给 `valuePtrs` 切片中对应的指针,然后通过循环遍历 `cols` 和 `values` 切片,获取每个查询结果的列名和值。
使用 `interface{}` 类型的变量获取查询结果的好处是可以灵活地处理不同类型的查询结果,但是需要注意的是,在使用 `interface{}` 类型的变量时,需要进行类型断言操作,避免出现类型错误的情况。