Updated Nov 5, 20267 min read

Best Go Hosting in 2026: Where to Deploy a Go Backend

Go compiles to one static binary, so almost any host can run it. The differences are in databases, queues, scaling and whose cloud account the app ends up in.

Go is one of the easiest languages to host, since go build produces a single binary with no runtime to install, it starts in milliseconds, and a small service fits comfortably in a few hundred megabytes of memory, so every platform from Cloud Run to a $5 VM can run it.

What separates Go hosting options is everything around the binary: where Postgres and queues come from, how the app scales, and whether it runs in your own AWS or GCP account or on a platform's servers. Two long-standing options also changed in 2026, with AWS App Runner closing to new customers and Heroku moving to a sustaining engineering model.

Go hosting at a glance

OptionRuns inDatabases and queuesBest fit
EncoreYour AWS or GCP accountPostgres, Pub/Sub, cron, buckets declared in Go codeGo backends that should live in your own cloud
Google Cloud RunYour GCP accountSeparate services (Cloud SQL, Pub/Sub) you wire upContainers that scale to zero
ECS Express ModeYour AWS accountSeparate services (RDS, SQS) you wire upA Fargate service with a load balancer from one API call
Fly.ioFly's infrastructureManaged Postgres, volumesApps close to users in many regions
RailwayRailway's infrastructurePostgres and Redis templates in the projectFast setup for small teams
RenderRender's infrastructureManaged Postgres and key-valueA managed platform with a native Go runtime
DigitalOcean App PlatformDigitalOceanManaged databasesTeams already on DigitalOcean

Each option is covered below, starting with Encore.

Running Go services in your own AWS or GCP account with Encore

Encore

Encore is infrastructure from code for TypeScript and Go, with a platform that provisions and deploys into your own AWS or GCP account. You write Go services with //encore:api endpoints and declare the Postgres databases, Pub/Sub topics, cron jobs and buckets they use in the same package, and Encore provisions RDS, SNS and SQS, S3 and Fargate or EKS on AWS or Cloud SQL, Pub/Sub and Cloud Run or GKE on GCP, and Encore provisions an IAM role for the service.

Application code passes through Encore and infrastructure guardrails to resources provisioned in your own AWS or GCP account.
Encore provisions the infrastructure your application needs in your own AWS or GCP account.

A service with a database and a nightly cleanup job looks like this:

// links/links.go package links import ( "context" "encore.dev/cron" "encore.dev/storage/sqldb" ) var db = sqldb.NewDatabase("links", sqldb.DatabaseConfig{ Migrations: "./migrations", }) type ShortenParams struct { URL string `json:"url"` } type Link struct { ID int64 `json:"id"` URL string `json:"url"` } //encore:api public method=POST path=/links func Shorten(ctx context.Context, p *ShortenParams) (*Link, error) { l := &Link{URL: p.URL} err := db.QueryRow(ctx, `INSERT INTO links (url) VALUES ($1) RETURNING id`, p.URL).Scan(&l.ID) return l, err } var _ = cron.NewJob("expire-links", cron.JobConfig{ Title: "Delete links older than 90 days", Schedule: "0 3 * * *", Endpoint: Expire, }) //encore:api private func Expire(ctx context.Context) error { _, err := db.Exec(ctx, `DELETE FROM links WHERE created_at < now() - interval '90 days'`) return err }

The migration in links/migrations creates the links table the queries use:

-- links/migrations/1_create_links.up.sql CREATE TABLE links ( id BIGSERIAL PRIMARY KEY, url TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT now() );
Get started
brew install encoredev/tap/encore &&
encore app create
Copy

Run in your terminal to get started locally.

encore run starts Postgres locally, applies the migrations and serves the API with tracing, and the cron job runs on its schedule in cloud environments. You connect your own AWS or GCP account once, and each push builds the binary, provisions what changed and deploys it.

For coding agents, the database and the job sit in the Go file next to the code that uses them, and encore run lets the agent test the change locally before anything reaches the cloud.

Encore asks you to structure the app as Encore services, so if you already have a Go binary and only need a place to run it, a container platform is the smaller step.

Google Cloud Run: containers that scale to zero

Google Cloud Run

Cloud Run runs containers on demand in your GCP account. gcloud run deploy --source . builds a Go app with Google Cloud's buildpacks without a Dockerfile, instances scale to zero when idle, and requests can run for up to 60 minutes.

Cloud SQL, Pub/Sub topics, secrets and the IAM bindings between them are separate GCP resources that you create yourself, usually in Terraform, and keep in sync with the app.

ECS Express Mode: the AWS replacement for App Runner

ECS Express Mode

AWS App Runner stopped accepting new customers on April 30, 2026, and AWS points new projects to Amazon ECS Express Mode. Given a container image and two IAM roles, it creates an ECS service on Fargate, an Application Load Balancer, autoscaling and networking in your account, and you pay only for those resources.

You still build and push the Go image, and RDS, SQS and the permissions between them are yours to create. It suits teams that want AWS-native containers and are comfortable owning the rest of the stack.

Fly.io: Go close to your users

Fly.io

On Fly.io, fly launch detects a Go app, generates a Dockerfile and a fly.toml, and deploys it as Fly Machines, which are lightweight VMs you can place in many regions. Go's small binaries and fast startup suit Machines that stop when idle and start on the next request.

Fly runs the app on its own infrastructure rather than in your AWS or GCP account, and multi-region data is a design problem you own: Postgres still has one primary.

Railway: quick setup for small teams

Railway

Railway builds Go repositories automatically and lets you add Postgres or Redis to the same project from templates, with variables linking them to the service.

The shared project canvas makes it quick to get prototypes and small products running, with the app and its data hosted on Railway's infrastructure rather than in your own cloud account.

Render: a managed platform with a native Go runtime

Render

Render supports Go as one of its native runtimes, so a web service runs go build and your start command without a Dockerfile. Managed Postgres, a key-value store, cron jobs and background workers are separate Render services in the same dashboard.

Render works much like Heroku did, with the app and database running on Render's infrastructure, which matters if the rest of your systems already live in AWS or GCP.

DigitalOcean App Platform

DigitalOcean App Platform

App Platform builds Go apps with a Go buildpack and can attach DigitalOcean Managed Databases. It fits teams whose droplets, databases and spaces already live on DigitalOcean.

Its service catalog and region list are smaller than those of AWS or GCP, which is worth checking against your plans for queues, regions and compliance.

Good to know

Heroku still runs Go apps through its Go buildpack, but in February 2026 it moved to a sustaining engineering model focused on stability rather than new features, while existing apps keep running unchanged.

How to choose

Pick Encore when the Go backend has databases, queues and scheduled jobs and you want it running in your own AWS or GCP account with local development that matches the cloud. Pick Cloud Run or ECS Express Mode for a single Go container in your own account when you are happy to manage the surrounding services, Fly.io for multi-region apps, Railway or Render for a managed setup, and DigitalOcean if the rest of your stack is already there.

Frequently asked questions

What is the best hosting for a Go backend?

It depends on how much you want to run yourself: Google Cloud Run for containers that scale to zero, Fly.io for apps close to users in many regions, Railway and Render for a simple managed platform, and ECS Express Mode for a container service on AWS that you configure yourself.

Can I still use AWS App Runner for Go?

Only as an existing customer: AWS stopped accepting new App Runner customers on April 30, 2026 and recommends Amazon ECS Express Mode instead, which creates a Fargate service, load balancer and autoscaling in your account.

How do I deploy a Go API with a database to AWS?

With Encore, declare the database in the service package with sqldb.NewDatabase and its migrations directory, and define endpoints with //encore:api. encore run starts Postgres locally, and deploying to an environment connected to your AWS account provisions RDS and runs the service on Fargate.

Deploy to your cloud on AWS and Google Cloud
without managing infrastructure

Encore lets developers and agents define application infrastructure directly in code, then automatically provisions it from local development to production in your AWS or GCP account.

~/orders — claude
Claude Code
Claude Code v2.1.180Opus 5.5~/orders