为了账号安全,请及时绑定邮箱和手机立即绑定

go mysql 返回空值

go mysql 返回空值

Go
杨魅力 2021-09-27 16:07:05
我目前正在研究 Golang Google App Engine 项目,但遇到了一个小问题。我有一个带有表“party”的数据库“party”。问题在于,当执行以下代码时,会打印一个 EMPTY json 数组——它实际上很长,但它只包含空的 Party。(而且我的数据库中确实有条目)Go 代码(不是全部):func getParties(w http.ResponseWriter, r *http.Request) {    rows := getRowsFromSql("select * from parties;")    parties := scanForParties(rows)    json, _ := json.Marshal(parties)    fmt.Fprint(w, string(json))}func scanForParties(rows *sql.Rows) []Party {    var parties []Party    for rows.Next() {        var id int        var name, author, datetime, datetime_to, host, location, description, longtitude, latitude, primary_image_id string        rows.Scan(&id, &name, &author, &datetime, &datetime_to, &host, &location, &description, &longtitude, &latitude, &primary_image_id)        party := Party{            Id:           id,            Name:         name,            Author:       author,            Datetime:     datetime,            Datetime_to:  datetime_to,            Host:         host,            Location:     location,            Description:  description,            Longtitude:   longtitude,            Latitude:     latitude,            PrimaryImgId: primary_image_id,        }        parties = append(parties, party)    }    return parties}func getRowsFromSql(query string) *sql.Rows {    con, err := sql.Open("mysql", dbConnectString)    if err != nil {        panic(err)    }    defer con.Close()    rows, err2 := con.Query(query)    if err != nil {        panic(err2)    }    return rows}type Party struct {    Id           int    Name         string    Author       string    Datetime     string    Datetime_to  string    Host         string    Location     string    Description  string    Longtitude   string    Latitude     string    PrimaryImgId string}
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

好的,所有其他人对错误的看法都是正确的:rows.Scan() 返回错误。当我最终检查它时,它说提供的扫描变量不足。简单的修复:添加缺少的一个。



查看完整回答
反对 回复 2021-09-27
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

这是一个猜测,但我认为这是因为您在这里关闭了与数据库的连接:

defer con.Close()

当这将关闭与数据库的连接getRowsFromSql的回报,所以,当你开始打电话的时间rows.Next()scanForParties数据库连接消失了。数据库连接关闭后,任何行集合都将不再可用。

error由于这个原因,某些东西可能会返回一个,但是因为您没有在您不知道的任何地方检查任何错误。在 Go 中,只要函数可以返回一个错误,就会检查错误(以及其他语言,在 Go 中更是如此,因为没有异常)。


查看完整回答
反对 回复 2021-09-27
  • 2 回答
  • 0 关注
  • 357 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信