Search code examples
postgresqlgoormgo-gorm

How to cast GORM query to string


I am writing a web app in go and using the GORM for my ORM. I need to be able to retrieve all the metrics of a certain user and return it via JSON to be displayed on the front end. The query seems to run successfully but I only see a memory address when printing the results and receive an error when trying to cast the results the standard way. Here is my current code

func DisplayData(w http.ResponseWriter, r *http.Request) {
    //Get the data from the database
    var metric models.Metric
    results := db.Where("user_id = ?", "1").Find(&metric)


    //Write a json response
    w.WriteHeader(http.StatusCreated)
    w.Header().Set("Content-Type", "application/json")
    resp := make(map[string]string)
    resp["message"] = results
    jsonResp, err := json.Marshal(resp)
    if err != nil {
        log.Fatalf("Error happened in JSON marshal. Err: %s", err)
    }
    w.Write(jsonResp)
    return
}

This results in the error

controllers/statsCont.go:116:18: cannot use results (type *gorm.DB) as type string in assignment
note: module requires Go 1.17

When I try to cast by surrounding result in string() it gives the following error.

controllers/statsCont.go:116:26: cannot convert results (type *gorm.DB) to type string
note: module requires Go 1.17

Solution

  • As stated by @BaytaDarell the query result is added in the variable passed inside Find method

    The return value of Find is different in the context it is called in case when it is called with db type the return type is (tx *DB) and when called with associations type the return type is Error

    To solve the issue remove below lines

    resp := make(map[string]string)
    resp["message"] = results
    

    And update it has

    resp := map[string]interface{}{"message": metric}