我目前正在研究 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贡献1847条经验 获得超11个赞
这是一个猜测,但我认为这是因为您在这里关闭了与数据库的连接:
defer con.Close()
当这将关闭与数据库的连接getRowsFromSql
的回报,所以,当你开始打电话的时间rows.Next()
在scanForParties
数据库连接消失了。数据库连接关闭后,任何行集合都将不再可用。
error
由于这个原因,某些东西可能会返回一个,但是因为您没有在您不知道的任何地方检查任何错误。在 Go 中,只要函数可以返回一个错误,就会检查错误(以及其他语言,在 Go 中更是如此,因为没有异常)。
- 2 回答
- 0 关注
- 357 浏览
添加回答
举报
0/150
提交
取消