登录
首页 >  Golang >  Go问答

查询如何获取数据库中返回空数据集的记录

来源:stackoverflow

时间:2024-02-26 20:57:24 438浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《查询如何获取数据库中返回空数据集的记录》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

现在,我尝试使用 gae+cloudsql 制作一个 api。 我编写了这段代码。

package main

import (
    "encoding/json"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
    "log"
    "net/http"
    "os"
)

type Person struct {
    gorm.Model
    Name string `json:"name"`
    Age  int    `json:"age"`
}

var db *gorm.DB

func main() {
    db = DB()

    http.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) {
        defer db.Close()
        var people []Person
        db.Find(&people)
        str, _ := json.Marshal(people)
        fmt.Printf("%s\n", str)
        return
    })

    port := os.Getenv("PORT")
    if port == "" {
        port = "8080"
        log.Printf("Defaulting to port %s", port)
    }

    log.Printf("Listening on port %s", port)
    log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}

func DB() *gorm.DB {
    var (
        connectionName = os.Getenv("CLOUDSQL_CONNECTION_NAME")
        user           = os.Getenv("CLOUDSQL_USER")
        password       = os.Getenv("CLOUDSQL_PASSWORD")
        socket         = os.Getenv("CLOUDSQL_SOCKET_PREFIX")
        databaseName   = os.Getenv("CLOUDSQL_DATABASE_NAME")
        option         = os.Getenv("CLOUDSQL_OPTION")
    )

    if socket == "" {
        socket = "/cloudsql"
    }
    if option == "" {
        option = "?parseTime=true"
    }

    dbURI := fmt.Sprintf("%s:%s@unix(%s/%s)/%s%s", user, password, socket, connectionName, databaseName, option)
    conn, err := gorm.Open("mysql", dbURI)
    if err != nil {
        panic(fmt.Sprintf("DB: %v", err))
    }

    return conn
}

在云的帮助下,我可以获得人员数据。

people.length等于db数据的数量。

但是,我得到的是

person.name 为“”,person.age = 0。

我不明白为什么我无法获取任何数据。 请告诉我如何解决这个问题。


解决方案


我找到了如何获得正确的 person.Nameperson.Age

我在http.HandleFunc中编写了defer db.Close()。因此,一旦调用该函数,数据库连接就会关闭。

我应该将 defer db.Close() 放在主函数的开头。

我对一个简单的错误感到抱歉,但重新理解了。

今天关于《查询如何获取数据库中返回空数据集的记录》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>