Write once, run on any cloud ☁️
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):
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. It creates
human-readable code that only imports the cloud SDKs for providers you use. This
allows the Go CDK to grow to support any number of cloud providers, 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:
# 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 for the project lives primarily on https://gocloud.dev/, including tutorials.
You can also browse Go package reference on godoc.org.
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, you can post to the go-cloud mailing list or email us at go-cdk-feedback@google.com.
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)
Thank you for your interest in contributing to the Go Cloud Development Kit! ❤️
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 contains some provider implementations for each portable API. We intend to include Google Cloud Platform, Amazon Web Services, and Azure implementations, as well as prominent open source providers and at least one implementation suitable for use in local testing. Unfortunately, we cannot support every cloud provider directly from the project; however, we encourage contributions in separate repositories.
If you create a repository that implements the Go CDK interfaces for other providers, 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 for more details.
You can contact us on the go-cloud mailing list.
This project is covered by the Go Code of Conduct.