dataloader

Implementation of Facebook's DataLoader in Golang

Github stars Tracking Chart

DataLoader

GoDoc
Build Status

This is an implementation of Facebook's DataLoader in Golang.

Install

go get -u github.com/graph-gophers/dataloader

Usage

// setup batch function
batchFn := func(ctx context.Context, keys dataloader.Keys) []*dataloader.Result {
  var results []*dataloader.Result
  // do some async work to get data for specified keys
  // append to this list resolved values
  return results
}

// create Loader with an in-memory cache
loader := dataloader.NewBatchedLoader(batchFn)

/**
 * Use loader
 *
 * A thunk is a function returned from a function that is a
 * closure over a value (in this case an interface value and error).
 * When called, it will block until the value is resolved.
 */
thunk := loader.Load(context.TODO(), dataloader.StringKey("key1")) // StringKey is a convenience method that make wraps string to implement `Key` interface
result, err := thunk()
if err != nil {
  // handle data error
}

log.Printf("value: %#v", result)

Don't need/want to use context?

You're welcome to install the v1 version of this library.

Cache

This implementation contains a very basic cache that is intended only to be used for short lived DataLoaders (i.e. DataLoaders that ony exsist for the life of an http request). You may use your own implementation if you want.

it also has a NoCache type that implements the cache interface but all methods are noop. If you do not wish to cache anything.

Examples

There are a few basic examples in the example folder.

Main metrics

Overview
Name With Ownergraph-gophers/dataloader
Primary LanguageGo
Program languageGo (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2016-11-23 17:40:48
Pushed At2024-05-27 15:39:56
Last Commit At2023-03-19 02:48:52
Release Count10
Last Release Namev7.1.0 (Posted on )
First Release Namev4.0.0 (Posted on 2017-12-05 16:49:05)
用户参与
Stargazers Count1.2k
Watchers Count13
Fork Count77
Commits Count130
Has Issues Enabled
Issues Count53
Issue Open Count11
Pull Requests Count36
Pull Requests Open Count10
Pull Requests Close Count15
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private