GAE Go — How to use GetMulti with non-existent entity keys?

go, google-app-engine, google-cloud-datastore

Solution

GetMulti can return a `appengine.MultiError` in this case. Loop through that and look for `datastore.ErrNoSuchEntity`. For example:

if err := datastore.GetMulti(c, keys, dst); err != nil {
    if me, ok := err.(appengine.MultiError); ok {
        for i, merr := range me {
            if merr == datastore.ErrNoSuchEntity {
                // keys[i] is missing
            }
        }
    } else {
        return err
    }
}

Problem

I've found myself needing to do a `GetMulti` operation with an array of keys for which some entities exist, but some do not. My current code, below, returns an error (`datastore: no such entity`). `err := datastore.GetMulti(c, keys, infos)` So how can I do this? I'd use a "get or insert" method, but there isn't one.

Original source