code: func Put(c context.Context,
  	key *datastore.Key, val interface{}) (*datastore.Key, error) {
  
  	keys := []*datastore.Key{key}
  	vals := []interface{}{val}
  	if err := checkKeysValues(keys, reflect.ValueOf(vals)); err != nil {
  		return nil, err
  	}
  
  	keys, err := putMulti(c, keys, vals)
  	switch e := err.(type) {
  	case nil:
  		return keys[0], nil
  	case appengine.MultiError:
  		return nil, e[0]
  	default:
  		return nil, err
  	}
  }
docs: // Put saves the entity val into the datastore with key. val must be a struct
  // pointer; if a struct pointer then any unexported fields of that struct will
  // be skipped. If key is an incomplete key, the returned key will be a unique
  // key generated by the datastore.