gocloud.dev: gocloud.dev/docstore/memdocstore Index | Examples | Files

package memdocstore

import "gocloud.dev/docstore/memdocstore"

Package memdocstore provides an in-process in-memory implementation of the docstore API. It is suitable for local development and testing.

Every document in a memdocstore collection has a unique primary key. The primary key values need not be strings; they may be any comparable Go value.

Action Lists

Action lists are executed concurrently. Each action in an action list is executed in a separate goroutine.

memdocstore calls the BeforeDo function of an ActionList once before executing the actions. Its As function never returns true.

URLs

For docstore.OpenCollection, memdocstore registers for the scheme "mem". To customize the URL opener, or for more details on the URL format, see URLOpener. See https://gocloud.dev/concepts/urls/ for background information.

Code:

// PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored.
// PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/docstore/memdocstore"
// PRAGMA: On gocloud.dev, hide lines until the next blank line.
ctx := context.Background()

// docstore.OpenCollection creates a *docstore.Collection from a URL.
coll, err := docstore.OpenCollection(ctx, "mem://collection/keyField")
if err != nil {
    log.Fatal(err)
}
defer coll.Close()
// PRAGMA: On gocloud.dev, hide lines until the next blank line.

Index

Examples

Package Files

codec.go mem.go query.go urls.go

Constants

const Scheme = "mem"

Scheme is the URL scheme memdocstore registers its URLOpener under on docstore.DefaultMux.

func OpenCollection Uses

func OpenCollection(keyField string, opts *Options) (*docstore.Collection, error)

OpenCollection creates a *docstore.Collection backed by memory. keyField is the document field holding the primary key of the collection.

Code:

// PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored.

coll, err := memdocstore.OpenCollection("keyField", nil)
if err != nil {
    log.Fatal(err)
}
defer coll.Close()
// PRAGMA: On gocloud.dev, hide lines until the next blank line.

func OpenCollectionWithKeyFunc Uses

func OpenCollectionWithKeyFunc(keyFunc func(docstore.Document) interface{}, opts *Options) (*docstore.Collection, error)

OpenCollectionWithKeyFunc creates a *docstore.Collection backed by memory. keyFunc takes a document and returns the document's primary key. It should return nil if the document is missing the information to construct a key. This will cause all actions, even Create, to fail.

For the collection to be usable with Query.Delete and Query.Update, keyFunc must work with map[string]interface{} as well as whatever struct type the collection normally uses (if any).

Code:

// PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored.
// PRAGMA: On gocloud.dev, hide lines until the next blank line.
type HighScore struct {
    Game   string
    Player string
}

// The name of a document is constructed from the Game and Player fields.
nameFromDocument := func(doc docstore.Document) interface{} {
    hs := doc.(*HighScore)
    return hs.Game + "|" + hs.Player
}

coll, err := memdocstore.OpenCollectionWithKeyFunc(nameFromDocument, nil)
if err != nil {
    log.Fatal(err)
}
defer coll.Close()
// PRAGMA: On gocloud.dev, hide lines until the next blank line.

type Options Uses

type Options struct {
    // The name of the field holding the document revision.
    // Defaults to docstore.DefaultRevisionField.
    RevisionField string

    // The maximum number of concurrent goroutines started for a single call to
    // ActionList.Do. If less than 1, there is no limit.
    MaxOutstandingActions int

    // The filename associated with this collection.
    // When a collection is opened with a non-nil filename, the collection
    // is loaded from the file if it exists. Otherwise, an empty collection is created.
    // When the collection is closed, its contents are saved to the file.
    Filename string
    // contains filtered or unexported fields
}

Options are optional arguments to the OpenCollection functions.

type URLOpener Uses

type URLOpener struct {
    // contains filtered or unexported fields
}

URLOpener opens URLs like "mem://collection/_id".

The URL's host is the name of the collection. The URL's path is used as the keyField.

The following query parameters are supported:

- revision_field (optional): the name of the revision field.
- filename (optional): the filename to store the collection in.

func (*URLOpener) OpenCollectionURL Uses

func (o *URLOpener) OpenCollectionURL(ctx context.Context, u *url.URL) (*docstore.Collection, error)

OpenCollectionURL opens a docstore.Collection based on u.

Package memdocstore imports 16 packages (graph) and is imported by 3 packages. Updated 2019-09-10. Refresh now. Tools for package owners.