forked from TrueCloudLab/restic
242 lines
4.9 KiB
Go
242 lines
4.9 KiB
Go
|
// Copyright 2017 Google Inc. All Rights Reserved.
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
|
||
|
// This file holds samples that are embedded into README.md.
|
||
|
|
||
|
// This file has to compile, but need not execute.
|
||
|
// If it fails to compile, fix it, then run `make` to regenerate README.md.
|
||
|
|
||
|
package readme
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"log"
|
||
|
"time"
|
||
|
|
||
|
"cloud.google.com/go/bigquery"
|
||
|
"cloud.google.com/go/datastore"
|
||
|
"cloud.google.com/go/logging"
|
||
|
"cloud.google.com/go/pubsub"
|
||
|
"cloud.google.com/go/spanner"
|
||
|
"cloud.google.com/go/storage"
|
||
|
|
||
|
"golang.org/x/net/context"
|
||
|
"golang.org/x/oauth2"
|
||
|
"google.golang.org/api/iterator"
|
||
|
"google.golang.org/api/option"
|
||
|
)
|
||
|
|
||
|
var ctx context.Context
|
||
|
|
||
|
const END = 0
|
||
|
|
||
|
func auth() {
|
||
|
//[ auth
|
||
|
client, err := storage.NewClient(ctx)
|
||
|
//]
|
||
|
_ = client
|
||
|
_ = err
|
||
|
}
|
||
|
|
||
|
func auth2() {
|
||
|
//[ auth-JSON
|
||
|
client, err := storage.NewClient(ctx, option.WithServiceAccountFile("path/to/keyfile.json"))
|
||
|
//]
|
||
|
_ = client
|
||
|
_ = err
|
||
|
}
|
||
|
|
||
|
func auth3() {
|
||
|
var ELLIPSIS oauth2.TokenSource
|
||
|
//[ auth-ts
|
||
|
tokenSource := ELLIPSIS
|
||
|
client, err := storage.NewClient(ctx, option.WithTokenSource(tokenSource))
|
||
|
//]
|
||
|
_ = client
|
||
|
_ = err
|
||
|
}
|
||
|
|
||
|
func datastoreSnippets() {
|
||
|
//[ datastore-1
|
||
|
client, err := datastore.NewClient(ctx, "my-project-id")
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
//]
|
||
|
|
||
|
//[ datastore-2
|
||
|
type Post struct {
|
||
|
Title string
|
||
|
Body string `datastore:",noindex"`
|
||
|
PublishedAt time.Time
|
||
|
}
|
||
|
keys := []*datastore.Key{
|
||
|
datastore.NameKey("Post", "post1", nil),
|
||
|
datastore.NameKey("Post", "post2", nil),
|
||
|
}
|
||
|
posts := []*Post{
|
||
|
{Title: "Post 1", Body: "...", PublishedAt: time.Now()},
|
||
|
{Title: "Post 2", Body: "...", PublishedAt: time.Now()},
|
||
|
}
|
||
|
if _, err := client.PutMulti(ctx, keys, posts); err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
//]
|
||
|
}
|
||
|
|
||
|
func storageSnippets() {
|
||
|
//[ storage-1
|
||
|
client, err := storage.NewClient(ctx)
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
//]
|
||
|
|
||
|
//[ storage-2
|
||
|
// Read the object1 from bucket.
|
||
|
rc, err := client.Bucket("bucket").Object("object1").NewReader(ctx)
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
defer rc.Close()
|
||
|
body, err := ioutil.ReadAll(rc)
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
//]
|
||
|
_ = body
|
||
|
}
|
||
|
|
||
|
func pubsubSnippets() {
|
||
|
//[ pubsub-1
|
||
|
client, err := pubsub.NewClient(ctx, "project-id")
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
//]
|
||
|
|
||
|
const ELLIPSIS = 0
|
||
|
|
||
|
//[ pubsub-2
|
||
|
// Publish "hello world" on topic1.
|
||
|
topic := client.Topic("topic1")
|
||
|
res := topic.Publish(ctx, &pubsub.Message{
|
||
|
Data: []byte("hello world"),
|
||
|
})
|
||
|
// The publish happens asynchronously.
|
||
|
// Later, you can get the result from res:
|
||
|
_ = ELLIPSIS
|
||
|
msgID, err := res.Get(ctx)
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
|
||
|
// Use a callback to receive messages via subscription1.
|
||
|
sub := client.Subscription("subscription1")
|
||
|
err = sub.Receive(ctx, func(ctx context.Context, m *pubsub.Message) {
|
||
|
fmt.Println(m.Data)
|
||
|
m.Ack() // Acknowledge that we've consumed the message.
|
||
|
})
|
||
|
if err != nil {
|
||
|
log.Println(err)
|
||
|
}
|
||
|
//]
|
||
|
_ = msgID
|
||
|
}
|
||
|
|
||
|
func bqSnippets() {
|
||
|
//[ bq-1
|
||
|
c, err := bigquery.NewClient(ctx, "my-project-ID")
|
||
|
if err != nil {
|
||
|
// TODO: Handle error.
|
||
|
}
|
||
|
//]
|
||
|
|
||
|
//[ bq-2
|
||
|
// Construct a query.
|
||
|
q := c.Query(`
|
||
|
SELECT year, SUM(number)
|
||
|
FROM [bigquery-public-data:usa_names.usa_1910_2013]
|
||
|
WHERE name = "William"
|
||
|
GROUP BY year
|
||
|
ORDER BY year
|
||
|
`)
|
||
|
// Execute the query.
|
||
|
it, err := q.Read(ctx)
|
||
|
if err != nil {
|
||
|
// TODO: Handle error.
|
||
|
}
|
||
|
// Iterate through the results.
|
||
|
for {
|
||
|
var values []bigquery.Value
|
||
|
err := it.Next(&values)
|
||
|
if err == iterator.Done {
|
||
|
break
|
||
|
}
|
||
|
if err != nil {
|
||
|
// TODO: Handle error.
|
||
|
}
|
||
|
fmt.Println(values)
|
||
|
}
|
||
|
//]
|
||
|
}
|
||
|
|
||
|
func loggingSnippets() {
|
||
|
//[ logging-1
|
||
|
ctx := context.Background()
|
||
|
client, err := logging.NewClient(ctx, "my-project")
|
||
|
if err != nil {
|
||
|
// TODO: Handle error.
|
||
|
}
|
||
|
//]
|
||
|
//[ logging-2
|
||
|
logger := client.Logger("my-log")
|
||
|
logger.Log(logging.Entry{Payload: "something happened!"})
|
||
|
//]
|
||
|
|
||
|
//[ logging-3
|
||
|
err = client.Close()
|
||
|
if err != nil {
|
||
|
// TODO: Handle error.
|
||
|
}
|
||
|
//]
|
||
|
}
|
||
|
|
||
|
func spannerSnippets() {
|
||
|
//[ spanner-1
|
||
|
client, err := spanner.NewClient(ctx, "projects/P/instances/I/databases/D")
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
//]
|
||
|
|
||
|
//[ spanner-2
|
||
|
// Simple Reads And Writes
|
||
|
_, err = client.Apply(ctx, []*spanner.Mutation{
|
||
|
spanner.Insert("Users",
|
||
|
[]string{"name", "email"},
|
||
|
[]interface{}{"alice", "a@example.com"})})
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
row, err := client.Single().ReadRow(ctx, "Users",
|
||
|
spanner.Key{"alice"}, []string{"email"})
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
//]
|
||
|
_ = row
|
||
|
}
|