本文整理汇总了Golang中github.com/jbenet/go-datastore.NewKey函数的典型用法代码示例。如果您正苦于以下问题:Golang NewKey函数的具体用法?Golang NewKey怎么用?Golang NewKey使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewKey函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: TestBasic
func (ks *DSSuite) TestBasic(c *C) {
var size = 1000
d, err := lru.NewDatastore(size)
c.Check(err, Equals, nil)
for i := 0; i < size; i++ {
err := d.Put(ds.NewKey(strconv.Itoa(i)), i)
c.Check(err, Equals, nil)
}
for i := 0; i < size; i++ {
j, err := d.Get(ds.NewKey(strconv.Itoa(i)))
c.Check(j, Equals, i)
c.Check(err, Equals, nil)
}
for i := 0; i < size; i++ {
err := d.Put(ds.NewKey(strconv.Itoa(i+size)), i)
c.Check(err, Equals, nil)
}
for i := 0; i < size; i++ {
j, err := d.Get(ds.NewKey(strconv.Itoa(i)))
c.Check(j, Equals, nil)
c.Check(err, Equals, ds.ErrNotFound)
}
for i := 0; i < size; i++ {
j, err := d.Get(ds.NewKey(strconv.Itoa(i + size)))
c.Check(j, Equals, i)
c.Check(err, Equals, nil)
}
}
开发者ID:rht,项目名称:go-datastore,代码行数:34,代码来源:datastore_test.go
示例2: TestCoalesceSamePutDiffPut
func TestCoalesceSamePutDiffPut(t *testing.T) {
m := setup()
done := make(chan struct{})
go func() {
m.ds.Put(ds.NewKey("foo"), "bar")
done <- struct{}{}
}()
go func() {
m.ds.Put(ds.NewKey("foo"), "bar")
done <- struct{}{}
}()
go func() {
m.ds.Put(ds.NewKey("foo"), "bar2")
done <- struct{}{}
}()
go func() {
m.ds.Put(ds.NewKey("foo"), "bar3")
done <- struct{}{}
}()
<-done
<-done
<-done
<-done
if m.inside != 3 {
t.Error("incalls should be 3", m.inside)
}
if m.outside != 4 {
t.Error("outcalls should be 4", m.outside)
}
}
开发者ID:rht,项目名称:go-datastore,代码行数:34,代码来源:coalesce_test.go
示例3: TestCoalesceHas
func TestCoalesceHas(t *testing.T) {
m := setup()
done := make(chan struct{})
errs := make(chan error, 30)
m.ds.Put(ds.NewKey("foo1"), "bar")
m.ds.Put(ds.NewKey("foo2"), "baz")
for i := 0; i < 10; i++ {
go func() {
v, err := m.ds.Has(ds.NewKey("foo1"))
if err != nil {
errs <- err
}
if !v {
errs <- fmt.Errorf("should have foo1")
}
done <- struct{}{}
}()
}
for i := 0; i < 10; i++ {
go func() {
v, err := m.ds.Has(ds.NewKey("foo2"))
if err != nil {
errs <- err
}
if !v {
errs <- fmt.Errorf("should have foo2")
}
done <- struct{}{}
}()
}
for i := 0; i < 10; i++ {
go func() {
v, err := m.ds.Has(ds.NewKey("foo3"))
if err != nil {
errs <- err
}
if v {
errs <- fmt.Errorf("should not have foo3")
}
done <- struct{}{}
}()
}
for i := 0; i < 30; i++ {
<-done
}
if m.inside != 5 {
t.Error("incalls should be 3", m.inside)
}
if m.outside != 32 {
t.Error("outcalls should be 30", m.outside)
}
}
开发者ID:rht,项目名称:go-datastore,代码行数:57,代码来源:coalesce_test.go
示例4: TestCoalesceSameGet
func TestCoalesceSameGet(t *testing.T) {
m := setup()
done := make(chan struct{})
errs := make(chan error, 30)
m.ds.Put(ds.NewKey("foo1"), "bar")
m.ds.Put(ds.NewKey("foo2"), "baz")
for i := 0; i < 10; i++ {
go func() {
v, err := m.ds.Get(ds.NewKey("foo1"))
if err != nil {
errs <- err
}
if v != "bar" {
errs <- fmt.Errorf("v is not bar", v)
}
done <- struct{}{}
}()
}
for i := 0; i < 10; i++ {
go func() {
v, err := m.ds.Get(ds.NewKey("foo2"))
if err != nil {
errs <- err
}
if v != "baz" {
errs <- fmt.Errorf("v is not baz", v)
}
done <- struct{}{}
}()
}
for i := 0; i < 10; i++ {
go func() {
_, err := m.ds.Get(ds.NewKey("foo3"))
if err == nil {
errs <- fmt.Errorf("no error")
}
done <- struct{}{}
}()
}
for i := 0; i < 30; i++ {
<-done
}
if m.inside != 5 {
t.Error("incalls should be 3", m.inside)
}
if m.outside != 32 {
t.Error("outcalls should be 30", m.outside)
}
}
开发者ID:rht,项目名称:go-datastore,代码行数:54,代码来源:coalesce_test.go
示例5: lookup
func (d *Datastore) lookup(key ds.Key) (ds.Datastore, ds.Key, ds.Key) {
d.lk.Lock()
defer d.lk.Unlock()
for _, m := range d.mounts {
if m.Prefix.Equal(key) || m.Prefix.IsAncestorOf(key) {
s := strings.TrimPrefix(key.String(), m.Prefix.String())
k := ds.NewKey(s)
return m.Datastore, m.Prefix, k
}
}
return nil, ds.NewKey("/"), key
}
开发者ID:rht,项目名称:go-datastore,代码行数:12,代码来源:mount.go
示例6: TestBasic
func (ks *DSSuite) TestBasic(c *C) {
mpds := ds.NewMapDatastore()
nsds := ns.Wrap(mpds, ds.NewKey("abc"))
keys := strsToKeys([]string{
"foo",
"foo/bar",
"foo/bar/baz",
"foo/barb",
"foo/bar/bazb",
"foo/bar/baz/barb",
})
for _, k := range keys {
err := nsds.Put(k, []byte(k.String()))
c.Check(err, Equals, nil)
}
for _, k := range keys {
v1, err := nsds.Get(k)
c.Check(err, Equals, nil)
c.Check(bytes.Equal(v1.([]byte), []byte(k.String())), Equals, true)
v2, err := mpds.Get(ds.NewKey("abc").Child(k))
c.Check(err, Equals, nil)
c.Check(bytes.Equal(v2.([]byte), []byte(k.String())), Equals, true)
}
run := func(d ds.Datastore, q dsq.Query) []ds.Key {
r, err := d.Query(q)
c.Check(err, Equals, nil)
e, err := r.Rest()
c.Check(err, Equals, nil)
return ds.EntryKeys(e)
}
listA := run(mpds, dsq.Query{})
listB := run(nsds, dsq.Query{})
c.Check(len(listA), Equals, len(listB))
// sort them cause yeah.
sort.Sort(ds.KeySlice(listA))
sort.Sort(ds.KeySlice(listB))
for i, kA := range listA {
kB := listB[i]
c.Check(nsds.InvertKey(kA), Equals, kB)
c.Check(kA, Equals, nsds.ConvertKey(kB))
}
}
开发者ID:rht,项目名称:go-datastore,代码行数:53,代码来源:namespace_test.go
示例7: Query
// Query implements Datastore.Query
func (d *Datastore) Query(q query.Query) (query.Results, error) {
results := make(chan query.Result)
walkFn := func(path string, info os.FileInfo, err error) error {
// remove ds path prefix
if strings.HasPrefix(path, d.path) {
path = path[len(d.path):]
}
if !info.IsDir() {
if strings.HasSuffix(path, ObjectKeySuffix) {
path = path[:len(path)-len(ObjectKeySuffix)]
}
key := ds.NewKey(path)
entry := query.Entry{Key: key.String(), Value: query.NotFetched}
results <- query.Result{Entry: entry}
}
return nil
}
go func() {
filepath.Walk(d.path, walkFn)
close(results)
}()
r := query.ResultsWithChan(q, results)
r = query.NaiveQueryApply(q, r)
return r, nil
}
开发者ID:rht,项目名称:go-datastore,代码行数:30,代码来源:fs.go
示例8: Query
// Query implements Query, inverting keys on the way back out.
func (d *datastore) Query(q dsq.Query) (dsq.Results, error) {
qr, err := d.raw.Query(q)
if err != nil {
return nil, err
}
ch := make(chan dsq.Result)
go func() {
defer close(ch)
defer qr.Close()
for r := range qr.Next() {
if r.Error != nil {
ch <- r
continue
}
k := ds.NewKey(r.Entry.Key)
if !d.prefix.IsAncestorOf(k) {
continue
}
r.Entry.Key = d.Datastore.InvertKey(k).String()
ch <- r
}
}()
return dsq.DerivedResults(qr, ch), nil
}
开发者ID:rht,项目名称:go-datastore,代码行数:30,代码来源:namespace.go
示例9: strsToKeys
func strsToKeys(strs []string) []ds.Key {
keys := make([]ds.Key, len(strs))
for i, s := range strs {
keys[i] = ds.NewKey(s)
}
return keys
}
开发者ID:rht,项目名称:go-datastore,代码行数:7,代码来源:namespace_test.go
示例10: ConvertKey
// ConvertKey returns a B58 encoded Datastore key
// TODO: this is hacky because it encodes every path component. some
// path components may be proper strings already...
func (b58KeyConverter) ConvertKey(dsk ds.Key) ds.Key {
k := ds.NewKey("/")
for _, n := range dsk.Namespaces() {
k = k.ChildString(b58.Encode([]byte(n)))
}
return k
}
开发者ID:whyrusleeping,项目名称:go-key,代码行数:10,代码来源:key.go
示例11: BenchmarkPutMany
func BenchmarkPutMany(b *testing.B) {
b.StopTimer()
path, err := ioutil.TempDir("/tmp", "boltdbtest")
db, err := NewBoltDatastore(path, "test")
if err != nil {
b.Fatal(err)
}
values := make(map[string][]byte)
for i := 0; i < b.N; i++ {
values[fmt.Sprint(i)] = []byte(fmt.Sprintf("value number %d", i))
}
b.StartTimer()
data := make(map[ds.Key]interface{})
for k, v := range values {
dsk := ds.NewKey(k)
data[dsk] = v
}
err = db.PutMany(data)
if err != nil {
b.Fatal(err)
}
}
开发者ID:admpub,项目名称:bolt-datastore,代码行数:25,代码来源:datastore_test.go
示例12: TestBasicPutGet
func TestBasicPutGet(t *testing.T) {
path, err := ioutil.TempDir("/tmp", "boltdbtest")
db, err := NewBoltDatastore(path, "test")
if err != nil {
t.Fatal(err)
}
dsk := ds.NewKey("test")
somedata := []byte("some data in the datastore")
err = db.Put(dsk, somedata)
if err != nil {
t.Fatal(err)
}
val, err := db.Get(dsk)
if err != nil {
t.Fatal(err)
}
b, ok := val.([]byte)
if !ok {
t.Fatal("Got back invalid typed data")
}
if !bytes.Equal(b, somedata) {
t.Fatal("wrong data")
}
err = db.Close()
if err != nil {
t.Fatal(err)
}
}
开发者ID:admpub,项目名称:bolt-datastore,代码行数:34,代码来源:datastore_test.go
示例13: Put
// Put adds a record to the record.Store. Multiple records
// may be put at once to the same path.
// In networked Stores, this may be a blocking operation.
// Some Stores may enforce strict consistency, others may be
// eventually consistent, and some might simply be best effort.
func (s *Store) Put(ctx cxt.Context, p store.Path, r record.Record) error {
k := ds.NewKey(string(p))
m, err := record.Marshal(r)
if err != nil {
return err
}
return s.ds.Put(k, m)
}
开发者ID:ipfs,项目名称:go-iprs,代码行数:14,代码来源:datastore.go
示例14: Query
func (bd *boltDatastore) Query(q query.Query) (query.Results, error) {
qrb := query.NewResultBuilder(q)
qrb.Process.Go(func(worker goprocess.Process) {
bd.db.View(func(tx *bolt.Tx) error {
buck := tx.Bucket(bd.bucketName)
c := buck.Cursor()
var prefix []byte
if qrb.Query.Prefix != "" {
prefix = []byte(qrb.Query.Prefix)
}
cur := 0
sent := 0
for k, v := c.Seek(prefix); k != nil; k, v = c.Next() {
if cur < qrb.Query.Offset {
cur++
continue
}
if qrb.Query.Limit > 0 && sent >= qrb.Query.Limit {
break
}
dk := ds.NewKey(string(k)).String()
e := query.Entry{Key: dk}
if !qrb.Query.KeysOnly {
buf := make([]byte, len(v))
copy(buf, v)
e.Value = buf
}
select {
case qrb.Output <- query.Result{Entry: e}: // we sent it out
sent++
case <-worker.Closing(): // client told us to end early.
break
}
cur++
}
return nil
})
})
// go wait on the worker (without signaling close)
go qrb.Process.CloseAfterChildren()
qr := qrb.Results()
for _, f := range q.Filters {
qr = query.NaiveFilter(qr, f)
}
for _, o := range q.Orders {
qr = query.NaiveOrder(qr, o)
}
return qr, nil
}
开发者ID:admpub,项目名称:bolt-datastore,代码行数:57,代码来源:datastore.go
示例15: lookupBatch
func (mt *mountBatch) lookupBatch(key ds.Key) (ds.Batch, ds.Key, error) {
mt.lk.Lock()
defer mt.lk.Unlock()
child, loc, rest := mt.d.lookup(key)
t, ok := mt.mounts[loc.String()]
if !ok {
bds, ok := child.(ds.Batching)
if !ok {
return nil, ds.NewKey(""), ds.ErrBatchUnsupported
}
var err error
t, err = bds.Batch()
if err != nil {
return nil, ds.NewKey(""), err
}
mt.mounts[loc.String()] = t
}
return t, rest, nil
}
开发者ID:rht,项目名称:go-datastore,代码行数:20,代码来源:mount.go
示例16: addTestCases
func addTestCases(t *testing.T, d *datastore, testcases map[string]string) {
for k, v := range testcases {
dsk := ds.NewKey(k)
if err := d.Put(dsk, []byte(v)); err != nil {
t.Fatal(err)
}
}
for k, v := range testcases {
dsk := ds.NewKey(k)
v2, err := d.Get(dsk)
if err != nil {
t.Fatal(err)
}
v2b := v2.([]byte)
if string(v2b) != v {
t.Errorf("%s values differ: %s != %s", k, v, v2)
}
}
}
开发者ID:rht,项目名称:go-datastore,代码行数:21,代码来源:ds_test.go
示例17: Example
func Example() {
mp := ds.NewMapDatastore()
ns := nsds.Wrap(mp, ds.NewKey("/foo/bar"))
k := ds.NewKey("/beep")
v := "boop"
ns.Put(k, v)
fmt.Printf("ns.Put %s %s\n", k, v)
v2, _ := ns.Get(k)
fmt.Printf("ns.Get %s -> %s\n", k, v2)
k3 := ds.NewKey("/foo/bar/beep")
v3, _ := mp.Get(k3)
fmt.Printf("mp.Get %s -> %s\n", k3, v3)
// Output:
// ns.Put /beep boop
// ns.Get /beep -> boop
// mp.Get /foo/bar/beep -> boop
}
开发者ID:rht,项目名称:go-datastore,代码行数:21,代码来源:example_test.go
示例18: Get
// Get retrieves the "best" record for a given path from the
// record.Store. Determining the "best" record is based on
// the total ordering of records, given by record.Order().
// In networked Stores, this may be a blocking operation.
// Some Stores may enforce strict consistency, others may be
// eventually consistent, and some might simply be best effort.
func (s *Store) Get(ctx cxt.Context, p store.Path) (record.Record, error) {
k := ds.NewKey(string(p))
m, err := s.ds.Get(k)
if err != nil {
return nil, err
}
d, ok := m.([]byte)
if !ok {
return nil, fmt.Errorf("invalid datastore data (not a buffer)")
}
return record.UnmarshalFromSet(s.ts, d)
}
开发者ID:ipfs,项目名称:go-iprs,代码行数:19,代码来源:datastore.go
示例19: RunBatchTest
func RunBatchTest(t *testing.T, ds dstore.Batching) {
batch, err := ds.Batch()
if err != nil {
t.Fatal(err)
}
r := rand.New()
var blocks [][]byte
var keys []dstore.Key
for i := 0; i < 20; i++ {
blk := make([]byte, 256*1024)
r.Read(blk)
blocks = append(blocks, blk)
key := dstore.NewKey(base32.StdEncoding.EncodeToString(blk[:8]))
keys = append(keys, key)
err := batch.Put(key, blk)
if err != nil {
t.Fatal(err)
}
}
// Ensure they are not in the datastore before comitting
for _, k := range keys {
_, err := ds.Get(k)
if err == nil {
t.Fatal("should not have found this block")
}
}
// commit, write them to the datastore
err = batch.Commit()
if err != nil {
t.Fatal(err)
}
for i, k := range keys {
blk, err := ds.Get(k)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(blk.([]byte), blocks[i]) {
t.Fatal("blocks not correct!")
}
}
}
开发者ID:rht,项目名称:go-datastore,代码行数:48,代码来源:test_util.go
示例20: runQuery
func (d *datastore) runQuery(worker goprocess.Process, qrb *dsq.ResultBuilder) {
var rnge *util.Range
if qrb.Query.Prefix != "" {
rnge = util.BytesPrefix([]byte(qrb.Query.Prefix))
}
i := d.DB.NewIterator(rnge, nil)
defer i.Release()
// advance iterator for offset
if qrb.Query.Offset > 0 {
for j := 0; j < qrb.Query.Offset; j++ {
i.Next()
}
}
// iterate, and handle limit, too
for sent := 0; i.Next(); sent++ {
// end early if we hit the limit
if qrb.Query.Limit > 0 && sent >= qrb.Query.Limit {
break
}
k := ds.NewKey(string(i.Key())).String()
e := dsq.Entry{Key: k}
if !qrb.Query.KeysOnly {
buf := make([]byte, len(i.Value()))
copy(buf, i.Value())
e.Value = buf
}
select {
case qrb.Output <- dsq.Result{Entry: e}: // we sent it out
case <-worker.Closing(): // client told us to end early.
break
}
}
if err := i.Error(); err != nil {
select {
case qrb.Output <- dsq.Result{Error: err}: // client read our error
case <-worker.Closing(): // client told us to end.
return
}
}
}
开发者ID:rht,项目名称:go-datastore,代码行数:47,代码来源:datastore.go
注:本文中的github.com/jbenet/go-datastore.NewKey函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论