现在,我尝试使用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.Name
和person.Age
。
我已经在defer db.Close()
中写了http.HandleFunc
。因此,调用此函数后,数据库连接将关闭。
我应该将defer db.Close()
放在主要功能的开头。
抱歉,我犯了一个简单的错误,但很高兴理解。
关于google-app-engine - 查找方法以获取数据库中返回空数据集的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56998606/