MST

星途 面试题库

面试题:Go中如何使用database/sql包实现一个简单的MySQL查询

请使用Go语言的database/sql包连接到MySQL数据库,并编写一个函数实现简单的查询操作,查询一张名为`users`的表中所有用户的信息,表结构为`id (int), name (varchar), age (int)`。需要处理可能出现的错误。
44.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
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)
    }
}
  1. 首先定义了一个 User 结构体,用于存储从数据库查询出来的用户信息。
  2. queryUsers 函数使用 db.Query 执行SQL查询语句,获取 rows,然后通过 rows.Scan 将每一行的数据扫描到 User 结构体实例中,并添加到 users 切片中。
  3. main 函数中,先使用 sql.Open 打开数据库连接,然后调用 queryUsers 函数执行查询,并处理可能出现的错误。最后遍历输出查询到的用户信息。

请注意,上述代码中的数据库连接字符串(user:password@tcp(127.0.0.1:3306)/test)需要根据实际情况进行修改。同时,还需要确保你已经安装了MySQL驱动,例如 go get -u github.com/go-sql-driver/mysql