项目作者: einride

项目描述 :
Go SDK for implementing Spanner persistance for resource-oriented APIs.
高级语言: Go
项目地址: git://github.com/einride/spanner-aip-go.git
创建时间: 2021-01-05T12:43:55Z
项目社区:https://github.com/einride/spanner-aip-go

开源协议:MIT License

下载


Spanner AIP Go

PkgGoDev
GoReportCard
Codecov

Add-on to the AIP Go SDK for implementing
Cloud Spanner persistance for
resource-oriented APIs.

Experimental: This library is under active development and breaking changes
to config files, APIs and generated code are expected between releases.

Documentation

See https://aip.dev for the full AIP documentation and the
Cloud Spanner documentation.

Usage

Installing

  1. $ go get -u go.einride.tech/spanner-aip

Code generation config

Use a YAML config file to specify the schema to generate code from:

  1. databases:
  2. - name: music
  3. schema:
  4. - "testdata/migrations/music/*.up.sql"
  5. package:
  6. name: musicdb
  7. path: ./internal/examples/musicdb

Code generation

  1. $ go run go.einride.tech/spanner-aip generate

Reading data

Get

  1. package main
  2. import (
  3. "context"
  4. "cloud.google.com/go/spanner"
  5. "go.einride.tech/spanner-aip/internal/examples/musicdb"
  6. )
  7. func main() {
  8. ctx := context.Background()
  9. client, err := spanner.NewClient(
  10. ctx, "projects/<PROJECT>/instances/<INSTANCE>/databases/<DATABASE>",
  11. )
  12. if err != nil {
  13. panic(err) // TODO: Handle error.
  14. }
  15. singer, err := musicdb.Singers(client.Single()).Get(ctx, musicdb.SingersKey{
  16. SingerId: 42,
  17. })
  18. if err != nil {
  19. panic(err) // TODO: Handle error.
  20. }
  21. _ = singer // TODO: Use singer.
  22. }

List

  1. package main
  2. import (
  3. "context"
  4. "cloud.google.com/go/spanner"
  5. "cloud.google.com/go/spanner/spansql"
  6. "go.einride.tech/spanner-aip/internal/examples/musicdb"
  7. )
  8. func main() {
  9. ctx := context.Background()
  10. client, err := spanner.NewClient(
  11. ctx, "projects/<PROJECT>/instances/<INSTANCE>/databases/<DATABASE>",
  12. )
  13. if err != nil {
  14. panic(err) // TODO: Handle error.
  15. }
  16. // SELECT * FROM Singers
  17. // WHERE LastName = "Sinatra"
  18. // ORDER BY FirstName DESC
  19. // LIMIT 5
  20. // OFFSET 10
  21. if err := musicdb.Singers(client.Single()).List(ctx, musicdb.ListQuery{
  22. Where: spansql.ComparisonOp{
  23. Op: spansql.Eq,
  24. LHS: musicdb.Descriptor().Singers().LastName().ColumnID(),
  25. RHS: spansql.StringLiteral("Sinatra"),
  26. },
  27. Order: []spansql.Order{
  28. {Expr: musicdb.Descriptor().Singers().FirstName().ColumnID(), Desc: true},
  29. },
  30. Limit: 5,
  31. Offset: 10,
  32. }).Do(func(singer *musicdb.SingersRow) error {
  33. _ = singer // TODO: Use singer.
  34. return nil
  35. }); err != nil {
  36. panic(err) // TODO: Handle error.
  37. }
  38. }