I am currently making a simple API using GAE+CloudSQL.
We tried to implement an API that could retrieve all DB data and created the following code:
package main
import(
"encoding/json"
"fmt"
_"github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
"log"
"net/http"
"os"
)
type Person structure {
gorm.Model
Name string `json: "name"`
Age int `json: "age"`
}
vardb*gorm.DB
funcmain(){
db = DB()
http.HandleFunc("/user", func(whttp.ResponseWriter,r*http.Request){
prefer 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))
}
US>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:%[email protected](%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
}
However, if you implement this and hit the API, nothing will be printed.
After investigating the cause,
db.Find(&people)
After the people in , the number of elements in the array matched the number of data in the DB, but the contents were all empty or zero.
I have no idea if there is a problem with the implementation or GCP configuration.
Please tell me the solution.Thank you for your cooperation.
Sorry, I made a simple mistake.
http.HandleFunc("/user", func(whttp.ResponseWriter,r*http.Request){
prefer db.Close()
~~~~
})
As it was written, the DB connection will be lost after this function is executed.
Correct the code and write db.Close() directly below the main statement.
I was able to get both person.Name and person.Age.
Person
to
`gorm:"column:name"`
Since there is no column name specified in the format , you cannot map rows retrieved from the database to a structure, and all elements appear to be empty. What do you think?
https://gorm.io/docs/models.html
© 2023 OneMinuteCode. All rights reserved.