148 lines
5.7 KiB
Markdown
148 lines
5.7 KiB
Markdown
|
# The Go Cloud Development Kit (Go CDK)
|
|||
|
|
|||
|
_Write once, run on any cloud ☁️_
|
|||
|
|
|||
|
[![Build Status](https://github.com/google/go-cloud/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/google/go-cloud/actions)
|
|||
|
[![Go Report Card](https://goreportcard.com/badge/github.com/google/go-cloud)](https://goreportcard.com/report/github.com/google/go-cloud)
|
|||
|
[![PkgGoDev](https://pkg.go.dev/badge/mod/gocloud.dev)][PkgGoDev]
|
|||
|
[![Coverage](https://codecov.io/gh/google/go-cloud/branch/master/graph/badge.svg)](https://codecov.io/gh/google/go-cloud)
|
|||
|
![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/google/go-cloud)
|
|||
|
[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
|
|||
|
|
|||
|
<p align="center">
|
|||
|
<img width="509" height="276" src="internal/website/static/go-cdk-logo-gopherblue.png" alt="">
|
|||
|
</p>
|
|||
|
|
|||
|
The Go Cloud Development Kit (Go CDK) allows Go application developers to
|
|||
|
seamlessly deploy cloud applications on any combination of cloud providers. It
|
|||
|
does this by providing stable, idiomatic interfaces for common uses like storage
|
|||
|
and databases. Think `database/sql` for cloud products.
|
|||
|
|
|||
|
Imagine writing this to read from blob storage (like Google Cloud Storage or
|
|||
|
S3):
|
|||
|
|
|||
|
```go
|
|||
|
ctx := context.Background()
|
|||
|
bucket, err := blob.OpenBucket(ctx, "s3://my-bucket")
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
defer bucket.Close()
|
|||
|
blobReader, err := bucket.NewReader(ctx, "my-blob", nil)
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
and being able to run that code on any cloud you want, avoiding all the ceremony
|
|||
|
of cloud-specific authorization, tracing, SDKs and all the other code required
|
|||
|
to make an application portable across cloud platforms.
|
|||
|
|
|||
|
The project works well with a code generator called
|
|||
|
[Wire](https://github.com/google/wire/blob/master/README.md). It creates
|
|||
|
human-readable code that only imports the cloud SDKs for services you use. This
|
|||
|
allows the Go CDK to grow to support any number of cloud services, without
|
|||
|
increasing compile times or binary sizes, and avoiding any side effects from
|
|||
|
`init()` functions.
|
|||
|
|
|||
|
You can learn more about the project from our [announcement blog post][], or our
|
|||
|
talk at Next 2018:
|
|||
|
|
|||
|
[![Video: Building Go Applications for the Open Cloud (Cloud Next '18)](https://img.youtube.com/vi/_2ZwhvIkgek/0.jpg)][video]
|
|||
|
|
|||
|
[announcement blog post]: https://blog.golang.org/go-cloud
|
|||
|
[PkgGoDev]: https://pkg.go.dev/mod/gocloud.dev
|
|||
|
[travis]: https://travis-ci.com/google/go-cloud
|
|||
|
[video]: https://www.youtube.com/watch?v=_2ZwhvIkgek
|
|||
|
|
|||
|
## Installation
|
|||
|
|
|||
|
```shell
|
|||
|
# First "cd" into your project directory if you have one to ensure "go get" uses
|
|||
|
# Go modules (or not) appropriately. See "go help modules" for more info.
|
|||
|
go get gocloud.dev
|
|||
|
```
|
|||
|
|
|||
|
The Go CDK builds at the latest stable release of Go. Previous Go versions may
|
|||
|
compile but are not supported.
|
|||
|
|
|||
|
## Documentation
|
|||
|
|
|||
|
Documentation for the project lives primarily on https://gocloud.dev/, including
|
|||
|
[tutorials][].
|
|||
|
|
|||
|
You can also browse Go package reference on [pkg.go.dev][PkgGoDev].
|
|||
|
|
|||
|
[tutorials]: https://gocloud.dev/tutorials/
|
|||
|
|
|||
|
## Project status
|
|||
|
|
|||
|
The APIs are still in alpha, but we think they are production-ready and are
|
|||
|
actively looking for feedback from early adopters. If you have comments or
|
|||
|
questions please open an issue.
|
|||
|
|
|||
|
At this time we prefer to focus on maintaining the existing APIs and drivers,
|
|||
|
and are unlikely to accept new ones into the `go-cloud` repository. The modular
|
|||
|
nature of the Go CDK makes it simple to host new APIs and drivers for existing
|
|||
|
APIs externally, in separate repositories.
|
|||
|
|
|||
|
If you have a new API or driver that you believe are important and mature enough
|
|||
|
to be included, feel free to open an issue to discuss this; our default will
|
|||
|
likely be to suggest starting in a separate repository. We'll also be happy
|
|||
|
to maintain a list of such external APIs and drivers in this README.
|
|||
|
|
|||
|
## Current features
|
|||
|
|
|||
|
The Go CDK provides generic APIs for:
|
|||
|
|
|||
|
* Unstructured binary (blob) storage
|
|||
|
* Publish/Subscribe (pubsub)
|
|||
|
* Variables that change at runtime (runtimevar)
|
|||
|
* Connecting to MySQL and PostgreSQL databases (mysql, postgres)
|
|||
|
* Server startup and diagnostics: request logging, tracing, and health
|
|||
|
checking (server)
|
|||
|
|
|||
|
## Contributing
|
|||
|
|
|||
|
Thank you for your interest in contributing to the Go Cloud Development
|
|||
|
Kit! :heart:
|
|||
|
|
|||
|
Everyone is welcome to contribute, whether it's in the form of code,
|
|||
|
documentation, bug reports, feature requests, or anything else. We encourage you
|
|||
|
to experiment with the Go CDK and make contributions to help evolve it to meet
|
|||
|
your needs!
|
|||
|
|
|||
|
The GitHub repository at [google/go-cloud][go-cloud] contains some driver
|
|||
|
implementations for each portable API. We intend to include
|
|||
|
[Google Cloud Platform][gcp], [Amazon Web Services][aws], and [Azure][azure]
|
|||
|
implementations, as well as prominent open source services and at least one
|
|||
|
implementation suitable for use in local testing. Unfortunately, we cannot
|
|||
|
support every service directly from the project; however, we encourage
|
|||
|
contributions in separate repositories.
|
|||
|
|
|||
|
If you create a repository that implements the Go CDK interfaces for other
|
|||
|
services, let us know! We would be happy to link to it here and give you a
|
|||
|
heads-up before making any breaking changes.
|
|||
|
|
|||
|
See [the contributing guide](./CONTRIBUTING.md) for more details.
|
|||
|
|
|||
|
[go-cloud]: https://github.com/google/go-cloud
|
|||
|
[gcp]: http://cloud.google.com
|
|||
|
[aws]: http://aws.amazon.com
|
|||
|
[azure]: https://azure.microsoft.com/
|
|||
|
|
|||
|
## Community
|
|||
|
|
|||
|
This project is covered by the Go [Code of Conduct][].
|
|||
|
|
|||
|
[Code of Conduct]: ./CODE_OF_CONDUCT.md
|
|||
|
|
|||
|
## Legal disclaimer
|
|||
|
|
|||
|
The Go CDK is open-source and released under an [Apache 2.0
|
|||
|
License](https://github.com/google/go-cloud/blob/master/LICENSE). Copyright ©
|
|||
|
2018–2019 The Go Cloud Development Kit Authors.
|
|||
|
|
|||
|
If you are looking for the website of GoCloud Systems, which is unrelated to the
|
|||
|
Go CDK, visit https://gocloud.systems.
|