GORMのFindを使ってDBの中身を取得したが、すべて空になる


ただいまGAE+CloudSQLを使って簡単なAPIを作っています。  
DBの全データを取得できるAPIを実装しようとし、以下のコードを作りました。

[code]

    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
    }
    
[/code]

しかし、これを実装しAPIを叩くと、何も出力されません。  
原因を調べてみると、  
db.Find(&people)  
のあとのpeopleが、配列の要素数はDBのデータ数と合っていましたが中身がすべて空文字や0になっていました。

実装に問題があるのか、GCPの設定に問題があるのかさっぱりわかりません。  
どなたか解決策を教えてください。よろしくお願いいたします。




すみません、簡単なミスをしていました。

[code]

    http.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) {
        defer db.Close()
        ~~~~
    })
    
[/code]

と書いていたので、この関数の実行が終わるとDB接続が切れてしまいますね。  
コードを修正しdb.Close()をmain文直下に書くと、  
person.Nameもperson.Ageも取得することができました。

