google-app-engine - 查找方法以获取数据库中返回空数据集的记录

标签 google-app-engine go google-cloud-sql go-gorm

现在,我尝试使用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等于数据库数据的数量。

但是,我得到的是

person.Name为“”,person.Age = 0。

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

最佳答案

我发现了如何获取正确的person.Nameperson.Age

我已经在defer db.Close()中写了http.HandleFunc。因此,调用此函数后,数据库连接将关闭。

我应该将defer db.Close()放在主要功能的开头。

抱歉,我犯了一个简单的错误,但很高兴理解。

关于google-app-engine - 查找方法以获取数据库中返回空数据集的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56998606/

相关文章:

java - 使用 Objectify 4 对象化 GenericDao<T>

google-app-engine - 如何从 Google Developer Console 中的项目中删除自己?

go - 如何使用神经网络建立一个基本的围棋项目?

sorting - 在 GoLang 中排序对

go - 如何使用接口(interface)在 Golang 中为数据库实现依赖注入(inject)

google-cloud-sql - 如何更改 Google Cloud SQL 故障转移副本的机器类型

google-app-engine - GO:如何将数据发布到数据存储区?

javascript - 使用 Google+ 登录验证对 App Engine 后端的调用

android - 如何在 Android Studio 中使用 Google Endpoints 写入 Cloud SQL

mysql - Google Cloud SQL 卡在重启时