面试题答案
一键面试package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
type User struct {
ID int
Name string
Age int
}
func queryUsers(db *sql.DB) ([]User, error) {
rows, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
return nil, err
}
defer rows.Close()
var users []User
for rows.Next() {
var user User
err := rows.Scan(&user.ID, &user.Name, &user.Age)
if err != nil {
return nil, err
}
users = append(users, user)
}
if err = rows.Err(); err != nil {
return nil, err
}
return users, nil
}
你可以使用如下方式调用这个函数:
func main() {
// 假设数据库连接字符串为:用户名:密码@tcp(127.0.0.1:3306)/数据库名
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/test")
if err != nil {
panic(err.Error())
}
defer db.Close()
users, err := queryUsers(db)
if err != nil {
fmt.Println("查询错误:", err)
return
}
for _, user := range users {
fmt.Printf("ID: %d, Name: %s, Age: %d\n", user.ID, user.Name, user.Age)
}
}
- 首先定义了一个
User
结构体,用于存储从数据库查询出来的用户信息。 queryUsers
函数使用db.Query
执行SQL查询语句,获取rows
,然后通过rows.Scan
将每一行的数据扫描到User
结构体实例中,并添加到users
切片中。- 在
main
函数中,先使用sql.Open
打开数据库连接,然后调用queryUsers
函数执行查询,并处理可能出现的错误。最后遍历输出查询到的用户信息。
请注意,上述代码中的数据库连接字符串(user:password@tcp(127.0.0.1:3306)/test
)需要根据实际情况进行修改。同时,还需要确保你已经安装了MySQL驱动,例如 go get -u github.com/go-sql-driver/mysql
。