好的,下面是一个封装了通用查询功能的Go代码示例:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
type DBQuery struct {
db *sql.DB
}
func NewDBQuery() (*DBQuery, error) {
db, err := sql.Open("mysql", "username:password@tcp(localhost:3306)/database")
if err != nil {
return nil, err
}
return &DBQuery{db: db}, nil
}
func (q *DBQuery) Close() error {
return q.db.Close()
}
func (q *DBQuery) Query(sql string, args ...interface{}) ([]map[string]interface{}, error) {
rows, err := q.db.Query(sql, args...)
if err != nil {
return nil, err
}
defer rows.Close()
columns, _ := rows.Columns()
count := len(columns)
values := make([]interface{}, count)
valuePtrs := make([]interface{}, count)
result := []map[string]interface{}{}
for rows.Next() {
for i := 0; i < count; i++ {
valuePtrs[i] = &values[i]
}
rows.Scan(valuePtrs...)
rowData := map[string]interface{}{}
for i, colName := range columns {
val := values[i]
b, ok := val.([]byte)
if ok {
rowData[colName] = string(b)
} else {
rowData[colName] = val
}
}
result = append(result, rowData)
}
return result, nil
}
func main() {
dbq, err := NewDBQuery()
if err != nil {
fmt.Println("Failed to connect to database:", err)
return
}
defer dbq.Close()
sql := "SELECT * FROM users WHERE age > ?"
args := []interface{}{18}
rows, err := dbq.Query(sql, args...)
if err != nil {
fmt.Println("Failed to execute query:", err)
return
}
for _, row := range rows {
fmt.Println(row)
}
}
以上示例代码封装了一个通用查询功能,通过使用 sql.Open
函数连接到数据库(这里以MySQL为例),并提供了一个 Query
方法用于执行SQL查询语句,并返回结果集。你可以根据自己的需要修改和扩展此代码。请确保安装了对应的数据库驱动库,这里使用的是 github.com/go-sql-driver/mysql
。
内容由零声教学AI助手提供,问题来源于学员提问