Ich habe zwei Funktionen: eine, die Entitäten in den Datenspeicher schreibt und der andere soll sie abrufen. Wenn ich datastore.GetAll()
Funktion in meinem Abruf verwende, gibt es keine Ergebnisse zurück. Ich habe einen Test, der bestätigt, dass das Schreiben korrekt zu funktionieren scheint. Irgendwelche Ideen, warum das Retrieval nicht funktioniert? HierKeine Ergebnisse mit Datastore.GetAll in Golang
ist der Anwendungscode:
package tracker
import (
"fmt"
"appengine"
"appengine/datastore"
)
type User struct {
Email string
}
func createUser(ctx appengine.Context, email string) (*datastore.Key, error) {
u := &User{
Email: email,
}
incompleteKey := datastore.NewIncompleteKey(ctx, "User", nil)
key, err := datastore.Put(ctx, incompleteKey, u)
if err != nil {
return key, err
}
return key, nil
}
func getUser(ctx appengine.Context, email string) (u *User, e error) {
users := []User{}
q := datastore.NewQuery("User").Filter("Email", email)
keys, err := q.GetAll(ctx, &users)
if err != nil {
return nil, err
}
fmt.Printf("KEYS: %v", keys)
return &users[0], nil
}
Hier ist der Testcode:
package tracker
import (
"fmt"
"testing"
"appengine/datastore"
"appengine/aetest"
)
// This test is passing.
func TestCreateUser(t *testing.T) {
ctx, err := aetest.NewContext(nil)
if err != nil {
t.Fatal(err)
}
defer ctx.Close()
email := "[email protected]"
newKey, err := createUser(ctx, email)
if err != nil {
t.Errorf("Failed to create a new user: %v", err)
}
u := User{}
datastore.Get(ctx, newKey, &u)
if u.Email != email {
t.Errorf("Expected email to be %s, found %v.", email, u.Email)
}
}
func TestGetUser(t *testing.T) {
ctx, err := aetest.NewContext(nil)
if err != nil {
t.Fatal(err)
}
defer ctx.Close()
email := "[email protected]"
newKey, err := createUser(ctx, email)
fmt.Printf("key, %v; ", newKey)
u, err := getUser(ctx, newKey)
fmt.Printf("user, %v; error: %s", u, err)
if u.Email != email {
t.Error("Expected email to be %s, found %v.", email, u.Email)
}
}
Dank, die sich wie ein Charme! – katkinson
@katkinson Da es funktioniert hat, ist es angemessen, die Antwort als akzeptiert zu markieren, indem Sie auf das Häkchen daneben links klicken. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work Dies lässt zukünftige Leser wissen, dass die Antwort das Problem gelöst hat. – sberry