go.mercari.io/datastore@v1.8.2/aedatastore/example_test.go (about) 1 package aedatastore_test 2 3 import ( 4 "context" 5 "fmt" 6 "net/url" 7 8 "go.mercari.io/datastore/aedatastore" 9 "google.golang.org/appengine" 10 "google.golang.org/appengine/aetest" 11 "google.golang.org/appengine/taskqueue" 12 ) 13 14 func appengineContext() (ctx context.Context, cancelFn func() error) { 15 inst, err := aetest.NewInstance(&aetest.Options{StronglyConsistentDatastore: true, SuppressDevAppServerLog: true}) 16 if err != nil { 17 panic(err) 18 } 19 cancelFn = inst.Close 20 r, err := inst.NewRequest("GET", "/", nil) 21 if err != nil { 22 panic(err) 23 } 24 ctx = appengine.NewContext(r) 25 26 return 27 } 28 29 func ExampleFromContext() { 30 inst, err := aetest.NewInstance(&aetest.Options{StronglyConsistentDatastore: true, SuppressDevAppServerLog: true}) 31 if err != nil { 32 panic(err) 33 } 34 defer inst.Close() 35 r, err := inst.NewRequest("GET", "/", nil) 36 if err != nil { 37 panic(err) 38 } 39 ctx := appengine.NewContext(r) 40 41 client, err := aedatastore.FromContext( 42 ctx, 43 ) 44 if err != nil { 45 panic(err) 46 } 47 defer client.Close() 48 49 type Data struct { 50 Name string 51 } 52 53 key := client.IncompleteKey("Data", nil) 54 entity := &Data{Name: "mercari"} 55 key, err = client.Put(ctx, key, entity) 56 if err != nil { 57 panic(err) 58 } 59 60 entity = &Data{} 61 err = client.Get(ctx, key, entity) 62 if err != nil { 63 panic(err) 64 } 65 66 fmt.Println(entity.Name) 67 // Output: mercari 68 } 69 70 func ExampleTransactionContext() { 71 ctx, cancelFn := appengineContext() 72 go cancelFn() 73 74 client, err := aedatastore.FromContext(ctx) 75 if err != nil { 76 panic(err) 77 } 78 defer client.Close() 79 80 tx, err := client.NewTransaction(ctx) 81 if err != nil { 82 panic(err) 83 } 84 go tx.Commit() 85 86 txCtx := aedatastore.TransactionContext(tx) 87 88 // join task to Transaction! 89 task := taskqueue.NewPOSTTask("/foobar", url.Values{}) 90 _, err = taskqueue.Add(txCtx, task, "") 91 if err != nil { 92 panic(err) 93 } 94 }