go mysql 返回空值

我目前正在研究 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

}


杨魅力
浏览 358回答 2
2回答

神不在的星期二

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

回首忆惘然

这是一个猜测,但我认为这是因为您在这里关闭了与数据库的连接:defer con.Close()当这将关闭与数据库的连接getRowsFromSql的回报,所以,当你开始打电话的时间rows.Next()在scanForParties数据库连接消失了。数据库连接关闭后,任何行集合都将不再可用。error由于这个原因,某些东西可能会返回一个,但是因为您没有在您不知道的任何地方检查任何错误。在 Go 中,只要函数可以返回一个错误,就会检查错误(以及其他语言,在 Go 中更是如此,因为没有异常)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go