2016-06-25 11 views
1

Ich habe eine Funktion, die alle Benutzer aus einer MongoDB-Sammlung abrufen muss, die einen Fehler verursacht, wenn ich versuche, sie über einen REST-Endpunkt aufzurufen. Die Funktion ist:Golang MongoDB Fehler: Ergebnisargument muss eine Slice-Adresse sein

func (usercontroller UserController) GetAllUsers(w http.ResponseWriter, r *http.Request, p httprouter.Params) { 
     session := usercontroller.session.Copy() 
     defer session.Close() 

     // Stub user 
     result := models.User{} 

     // get all users 
     if err := session.DB("Auth").C("users").Find(nil).All(&result); err != nil { 
       w.WriteHeader(404) 
       return 
     } 

     // Marshal provided interface into JSON structure 
     mResult, _ := json.Marshal(result) 

     // Write content-type, statuscode, and the data package 
     w.Header().Set("Content-Type", "application/json") 
     w.WriteHeader(200) 
     fmt.Fprintf(w, "%s", mResult) 
} 

Der Fehler ist:

2016/06/25 16:00:21 http: panic serving 127.0.0.1:49898: result argument must be a slice address 
goroutine 13 [running]: 
net/http.(*conn).serve.func1(0xc82005e380) 
    /usr/lib/go-1.6/src/net/http/server.go:1389 +0xc1 
panic(0x729b60, 0xc82000ba50) 
    /usr/lib/go-1.6/src/runtime/panic.go:443 +0x4e9 
gopkg.in/mgo%2ev2.(*Iter).All(0xc8201280f0, 0x704600, 0xc82007e360, 0x0, 0x0) 
    /root/work/src/gopkg.in/mgo.v2/session.go:3696 +0x742 
gopkg.in/mgo%2ev2.(*Query).All(0xc8200bc600, 0x704600, 0xc82007e360, 0x0, 0x0) 
    /root/work/src/gopkg.in/mgo.v2/session.go:3723 +0x4f 
Auth-REST-Server/controllers.UserController.GetAllUsers(0xc82000d040, 0x7f3c1b9bf950, 0xc820061c70, 0xc8200c6380, 0x0, 0x0, 0x0) 
    /root/work/src/Auth-REST-Server/controllers/user.go:34 +0x251 
Auth-REST-Server/controllers.(UserController).GetAllUsers-fm(0x7f3c1b9bf950, 0xc820061c70, 0xc8200c6380, 0x0, 0x0, 0x0) 
    /root/work/src/Auth-REST-Server/server.go:21 +0x5f 
github.com/julienschmidt/httprouter.(*Router).ServeHTTP(0xc820016380, 0x7f3c1b9bf950, 0xc820061c70, 0xc8200c6380) 
    /root/work/src/github.com/julienschmidt/httprouter/router.go:344 +0x195 
net/http.serverHandler.ServeHTTP(0xc820122000, 0x7f3c1b9bf950, 0xc820061c70, 0xc8200c6380) 
    /usr/lib/go-1.6/src/net/http/server.go:2081 +0x19e 
net/http.(*conn).serve(0xc82005e380) 
    /usr/lib/go-1.6/src/net/http/server.go:1472 +0xf2e 
created by net/http.(*Server).Serve 
    /usr/lib/go-1.6/src/net/http/server.go:2137 +0x44e 

Was mache ich hier falsch zu tun. Ich dachte, ich könnte nur Find (Null) aufrufen. Alle (& Ergebnis) und alle Datensätze entsprechend abrufen.

+0

mongodb 'FindAll' -> query Rückgabe Array von Objekten nicht Ein Objekt anstelle von' result: = models.User {} 'Sie können' result: = [] models.User {} '-> lösen Ihr Problem – muthukumar

Antwort

3

In Ihrem Code Sie haben:

// Stub user 
result := models.User{} 

So Ergebnis stellt einen einzelnen Benutzer, aber Sie wollen, dass alle Benutzer aus der Datenbank, so dass die folgenden sollte die Arbeit machen:

// Stub user 
result := make([]models.User, 0, 10) // Here you can specify a len and a cap. 

Diese Weg, Ergebnis ist ein Stück von models.User.

Auch in Golang, sollten Sie nie einen Fehler ignorieren:

// Marshal provided interface into JSON structure 
mResult, _ := json.Marshal(result) 

werden sollten:

// Marshal provided interface into JSON structure 
mResult, err := json.Marshal(result) 
if err != nil { 
    // do something with the error (log it or write it in the response) 
} 

EDIT: ich den Code aktualisiert, sorry dafür.

+0

Ich habe alle Änderungen, die Sie vorgeschlagen, und jetzt bekomme ich diesen Fehler auf Build: models.User Literal ist kein Typ meine User-Struktur befindet sich in einem anonymen Typ – ozfive

+0

Vielen Dank für die Bearbeitung! Es hat das Problem jedoch nicht gelöst. So ist meine Benutzerdefinition. Es sollte stimmen. Typ ( Benutzer struct { Id bson.ObjectId 'json: "id" BSON: "_ id"' Vorname String 'json: "Vorname" BSON: "Vorname"' Name String 'json: "Nachname" bson: "lastname" ' Benutzername String' json: "Benutzername" bson: "Benutzername" ' Passwort String' json: "Passwort" bson: "Passwort" ' } – ozfive

+0

) Ich erhalte jetzt den Fehler kann nicht Typ machen User – ozfive

Verwandte Themen