Golang/MySQL:如何高效查询单条记录?
Golang/MySQL:如何高效查询单条记录? 我编写了一个函数来获取产品切片,但这个函数只返回单个记录的切片。 注意:我在MySQL控制台中尝试了相同的查询,找到了近200条记录。
func FindProductsByQueryString(query, search string) (result []Product, err error) {
connection, err := sql.Open("mysql", "My database config")
if err != nil {
return
}
rows, err := connection.Query(query, search)
if err != nil {
log.Println(err.Error())
return
}
defer rows.Close()
if rows.Next() {
prod := Product{}
err = rows.Scan(&prod.Id, &prod.Name, &prod.Group, &prod.Category, &prod.Brand,
&prod.Url, &prod.Image, &prod.OPrice, &prod.Price, &prod.TRate, &prod.Rate, &prod.Unit)
if err != nil {
log.Println(err.Error())
return
}
result = append(result, prod)
}
return
}
原始查询:
SELECT * FROM product WHERE MATCH(Name) AGAINST(?);
示例查询:
SELECT * FROM product WHERE MATCH(Name) AGAINST('Nokia');
更多关于Golang/MySQL:如何高效查询单条记录?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
天哪,我真是太蠢了。不过还是谢谢你。
更多关于Golang/MySQL:如何高效查询单条记录?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
引用 samadadi:
if rows.Next() {
你的意思是 for rows.Next()。没有循环,就没有多个条目。
您的问题在于代码逻辑只处理了查询结果的第一行记录。rows.Next() 在循环外只执行一次,导致仅获取单条记录。以下是修正后的代码:
func FindProductsByQueryString(query, search string) (result []Product, err error) {
connection, err := sql.Open("mysql", "My database config")
if err != nil {
return nil, err
}
defer connection.Close()
rows, err := connection.Query(query, search)
if err != nil {
log.Println(err.Error())
return nil, err
}
defer rows.Close()
for rows.Next() {
prod := Product{}
err = rows.Scan(&prod.Id, &prod.Name, &prod.Group, &prod.Category, &prod.Brand,
&prod.Url, &prod.Image, &prod.OPrice, &prod.Price, &prod.TRate, &prod.Rate, &prod.Unit)
if err != nil {
log.Println(err.Error())
return nil, err
}
result = append(result, prod)
}
// 检查遍历过程中是否出现错误
if err = rows.Err(); err != nil {
log.Println(err.Error())
return nil, err
}
return result, nil
}
主要修改:
- 使用
for rows.Next()循环遍历所有结果行 - 添加
defer connection.Close()确保数据库连接正确关闭 - 添加
rows.Err()检查处理行迭代过程中的潜在错误 - 在所有错误路径上明确返回 nil 切片和错误
这样修改后,函数将返回所有匹配查询条件的记录,而不仅仅是第一条。

