2020-08-19 17:01:22 +08:00
# go-zero
2022-09-25 20:29:55 +05:30
<p align="center">
<img align="center" width="150px" src="https://raw.githubusercontent.com/zeromicro/zero-doc/main/doc/images/go-zero.png">
</p>
2020-07-28 16:29:13 +08:00
2022-09-25 20:29:55 +05:30
go-zero is a web and rpc framework with lots of builtin engineering practices. It’ s born to ensure the stability of the busy services with resilience design and has been serving sites with tens of millions of users for years.
<div align=center>
2020-09-11 19:42:58 +08:00
2021-09-23 20:24:46 +08:00
[](https://codecov.io/gh/zeromicro/go-zero)
[](https://goreportcard.com/report/github.com/zeromicro/go-zero)
[](https://github.com/zeromicro/go-zero)
2022-05-07 10:08:25 +08:00
[](https://pkg.go.dev/github.com/zeromicro/go-zero)
[](https://github.com/avelino/awesome-go)
2020-08-15 15:16:57 +08:00
[](https://opensource.org/licenses/MIT)
2022-02-25 23:01:15 +08:00
[](https://discord.gg/4JQvC5A4Fe)
2022-05-07 10:11:21 +08:00
2022-09-25 20:29:55 +05:30
</div>
## 🤷 What is go-zero?
English | [简体中文 ](readme-cn.md )
2020-08-09 23:22:31 +08:00
2024-06-17 22:26:08 +08:00
<a href="https://trendshift.io/repositories/3263" target="_blank"><img src="https://trendshift.io/api/badge/repositories/3263" alt="zeromicro%2Fgo-zero | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
2022-09-25 20:29:55 +05:30
<a href="https://www.producthunt.com/posts/go-zero?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-go- ;zero" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=334030&theme=light" alt="go- ;zero - A  ;web  ;& ;  ;rpc  ;framework  ;written  ;in  ;Go. ; | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
2022-02-27 23:25:22 +08:00
2020-08-21 16:52:17 +08:00
2022-01-22 12:20:11 +08:00
go-zero (listed in CNCF Landscape: [https://landscape.cncf.io/?selected=go-zero ](https://landscape.cncf.io/?selected=go-zero )) is a web and rpc framework with lots of builtin engineering practices. It’ s born to ensure the stability of the busy services with resilience design and has been serving sites with tens of millions of users for years.
2020-08-21 16:52:17 +08:00
2021-02-02 16:58:45 +08:00
go-zero contains simple API description syntax and code generation tool called `goctl` . You can generate Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript from .api files with `goctl` .
2020-08-21 16:52:17 +08:00
2022-09-25 20:29:55 +05:30
#### Advantages of go-zero:
2020-08-21 22:51:04 +08:00
2023-10-15 21:15:25 +05:30
* Improves the stability of the services with tens of millions of daily active users
* Builtin chained timeout control, concurrency control, rate limit, adaptive circuit breaker, adaptive load shedding, even no configuration needed
* Builtin middlewares also can be integrated into your frameworks
* Simple API syntax, one command to generate a couple of different languages
* Auto validate the request parameters from clients
* Plenty of builtin microservice management and concurrent toolkits
2020-08-21 22:51:04 +08:00
2021-09-24 11:31:00 +08:00
<img src="https://raw.githubusercontent.com/zeromicro/zero-doc/main/doc/images/architecture-en.png" alt="Architecture" width="1500" />
2020-08-21 20:09:53 +08:00
2022-09-25 20:29:55 +05:30
## Backgrounds of go-zero
2020-07-28 16:29:13 +08:00
2023-10-16 05:41:17 +05:30
In early 2018, we embarked on a transformative journey to redesign our system, transitioning from a monolithic architecture built with Java and MongoDB to a microservices architecture. After careful research and comparison, we made a deliberate choice to:
2020-07-28 16:29:13 +08:00
2023-10-16 05:41:17 +05:30
* Go Beyond with Golang
2023-10-15 21:15:25 +05:30
* Great performance
* Simple syntax
* Proven engineering efficiency
* Extreme deployment experience
* Less server resource consumption
2023-10-16 05:41:17 +05:30
* Self-Design Our Microservice Architecture
* Microservice architecture facilitates the creation of scalable, flexible, and maintainable software systems with independent, reusable components.
* Easy to locate the problems within microservices.
* Easy to extend the features by adding or modifying specific microservices without impacting the entire system.
2020-07-28 16:29:13 +08:00
2022-09-25 20:29:55 +05:30
## Design considerations on go-zero
2020-07-28 16:29:13 +08:00
2022-01-22 12:20:11 +08:00
By designing the microservice architecture, we expected to ensure stability, as well as productivity. And from just the beginning, we have the following design principles:
2020-07-28 16:29:13 +08:00
2023-10-15 21:15:25 +05:30
* Keep it simple
* High availability
* Stable on high concurrency
* Easy to extend
* Resilience design, failure-oriented programming
* Try best to be friendly to the business logic development, encapsulate the complexity
* One thing, one way
2020-07-28 16:29:13 +08:00
2022-01-22 12:20:11 +08:00
After almost half a year, we finished the transfer from a monolithic system to microservice system and deployed on August 2018. The new system guaranteed business growth and system stability.
2020-07-28 16:29:13 +08:00
2022-09-25 20:29:55 +05:30
## The implementation and features of go-zero
2020-07-28 16:29:13 +08:00
2021-02-02 16:58:45 +08:00
go-zero is a web and rpc framework that integrates lots of engineering practices. The features are mainly listed below:
2020-07-28 16:29:13 +08:00
2023-10-15 21:15:25 +05:30
* Powerful tool included, less code to write
* Simple interfaces
* Fully compatible with net/http
* Middlewares are supported, easy to extend
* High performance
* Failure-oriented programming, resilience design
* Builtin service discovery, load balancing
* Builtin concurrency control, adaptive circuit breaker, adaptive load shedding, auto-trigger, auto recover
* Auto validation of API request parameters
* Chained timeout control
* Auto management of data caching
* Call tracing, metrics, and monitoring
* High concurrency protected
2020-07-28 16:29:13 +08:00
2022-01-22 12:20:11 +08:00
As below, go-zero protects the system with a couple of layers and mechanisms:
2020-07-28 16:29:13 +08:00
2021-09-24 11:31:00 +08:00

2020-07-28 16:29:13 +08:00
2025-12-12 22:28:47 +08:00
## The simplified architecture that we use with go-zero
2020-11-03 16:35:34 +08:00
2022-06-03 23:02:54 +08:00
<img width="1067" alt="image" src="https://user-images.githubusercontent.com/1918356/171880372-5010d846-e8b1-4942-8fe2-e2bbb584f762.png">
2020-08-08 13:40:11 +08:00
2025-12-12 22:28:47 +08:00
## Installation
2021-02-02 16:58:45 +08:00
Run the following command under your project:
2020-08-08 13:40:11 +08:00
2020-08-20 10:44:14 +08:00
```shell
2022-02-01 13:03:30 +08:00
go get -u github.com/zeromicro/go-zero
2020-08-20 10:44:14 +08:00
```
2020-08-08 13:40:11 +08:00
2025-12-12 22:28:47 +08:00
## AI-Native Development
Make AI assistants (Claude, GitHub Copilot, Cursor, etc.) your go-zero experts! The go-zero team provides a complete AI tooling ecosystem to generate framework-compliant code and boost your productivity.
### Three Core Projects
**[ai-context ](https://github.com/zeromicro/ai-context )** - AI's "Workflow Guide" (~5KB)
- Tells AI assistants **when and how ** to use go-zero tools
- Quick reference for code patterns and decision trees
- Optimized for GitHub Copilot via `.github/copilot-instructions.md`
**[zero-skills ](https://github.com/zeromicro/zero-skills )** - AI's "Knowledge Base" (~40KB+)
- Provides **detailed patterns ** with complete examples
- Shows ✅ correct patterns vs ❌ common mistakes
- Covers REST APIs, RPC, databases, and resilience patterns
**[mcp-zero ](https://github.com/zeromicro/mcp-zero )** - AI's "Runtime Tools"
- Enables AI to **execute actions ** : generate code, analyze projects
- Based on Model Context Protocol (MCP)
- Deep integration with Claude Desktop
### Quick Setup
#### GitHub Copilot
```bash
# Add ai-context as a submodule
git submodule add https://github.com/zeromicro/ai-context.git .github/ai-context
# Create symbolic link (macOS/Linux)
ln -s ai-context/00-instructions.md .github/copilot-instructions.md
# Windows
mklink .github\copilot-instructions.md .github\ai-context\00-instructions.md
# Update to latest version
git submodule update --remote .github/ai-context
```
#### Cursor
```bash
# Add ai-context as project rules
git submodule add https://github.com/zeromicro/ai-context.git .cursorrules
# Update to latest
git submodule update --remote .cursorrules
```
#### Windsurf (Codeium)
```bash
# Add ai-context for Windsurf
git submodule add https://github.com/zeromicro/ai-context.git .windsurfrules
# Update to latest
git submodule update --remote .windsurfrules
```
#### Claude Desktop + mcp-zero
```bash
# Install mcp-zero
git clone https://github.com/zeromicro/mcp-zero.git
cd mcp-zero
go build -o mcp-zero main.go
# Configure Claude Desktop (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json)
# Add to mcpServers:
{
"mcpServers": {
"mcp-zero": {
"command": "/path/to/mcp-zero",
"env": {
"GOCTL_PATH": "/Users/yourname/go/bin/goctl"
}
}
}
}
```
Or use Claude CLI:
```bash
# Add mcp-zero server via CLI
claude mcp add \
--transport stdio \
mcp-zero \
--env GOCTL_PATH=/Users/yourname/go/bin/goctl \
-- /path/to/mcp-zero
```
### How It Works
AI assistants use these tools together for a complete development experience:
1. **ai-context ** provides workflow guidance and quick patterns
2. **zero-skills ** supplies detailed implementations and best practices
3. **mcp-zero ** enables real-time code generation and project analysis
**Example**: Creating a new REST API
- AI reads **ai-context ** → knows to use `create_api_service` tool
- AI calls **mcp-zero ** → generates project structure
- AI references **zero-skills ** → implements handlers with correct patterns
- Result: Production-ready code following go-zero conventions ✅
## Quick Start
2020-09-04 15:40:12 +08:00
2023-10-15 21:15:25 +05:30
1. Full examples can be checked out from below:
2020-08-31 22:37:43 +08:00
2021-09-24 11:31:00 +08:00
[Rapid development of microservice systems ](https://github.com/zeromicro/zero-doc/blob/main/doc/shorturl-en.md )
2020-08-08 13:40:11 +08:00
2021-09-24 11:31:00 +08:00
[Rapid development of microservice systems - multiple RPCs ](https://github.com/zeromicro/zero-doc/blob/main/docs/zero/bookstore-en.md )
2020-08-14 15:31:10 +08:00
2023-10-15 21:15:25 +05:30
2. Install goctl
2020-08-30 23:34:57 +08:00
2022-01-22 12:20:11 +08:00
`goctl` can be read as `go control` . `goctl` means not to be controlled by code, instead, we control it. The inside `go` is not `golang` . At the very beginning, I was expecting it to help us improve productivity, and make our lives easier.
2020-08-30 23:34:57 +08:00
2021-02-02 16:58:45 +08:00
```shell
2023-03-10 22:18:48 +08:00
# for Go
2022-02-01 13:03:30 +08:00
go install github.com/zeromicro/go-zero/tools/goctl@latest
2025-12-12 22:28:47 +08:00
2022-05-28 14:39:25 +08:00
# For Mac
brew install goctl
2025-12-12 22:28:47 +08:00
2024-06-23 11:47:17 +08:00
# docker for all platforms
2022-04-05 11:51:09 +08:00
docker pull kevinwan/goctl
2024-06-23 11:47:17 +08:00
# run goctl
2024-03-02 16:40:31 +01:00
docker run --rm -it -v `pwd` :/app kevinwan/goctl --help
2021-02-02 16:58:45 +08:00
```
2025-12-12 22:28:47 +08:00
2024-06-23 11:47:17 +08:00
make sure goctl is executable and in your $PATH.
2025-12-12 22:28:47 +08:00
2023-10-15 21:15:25 +05:30
3. Create the API file, like greet.api, you can install the plugin of goctl in vs code, api syntax is supported.
2020-09-11 19:42:58 +08:00
2021-02-02 16:58:45 +08:00
```go
2021-08-10 18:02:11 +08:00
type (
Request {
2023-01-03 23:14:39 +08:00
Name string `path:"name,options=[you,me]"` // parameters are auto validated
2021-08-10 18:02:11 +08:00
}
2023-02-23 14:36:58 +08:00
2021-08-10 18:02:11 +08:00
Response {
Message string `json:"message"`
}
)
2023-02-23 14:36:58 +08:00
2021-02-02 16:58:45 +08:00
service greet-api {
@handler GreetHandler
2021-08-11 10:51:28 +08:00
get /greet/from/:name(Request) returns (Response)
2021-02-02 16:58:45 +08:00
}
```
2023-02-23 14:36:58 +08:00
2022-01-22 12:20:11 +08:00
the .api files also can be generated by goctl, like below:
2020-08-08 13:40:11 +08:00
2021-02-02 16:58:45 +08:00
```shell
goctl api -o greet.api
```
2023-02-23 14:36:58 +08:00
2023-10-15 21:15:25 +05:30
4. Generate the go server-side code
2020-10-22 22:24:35 +08:00
2021-02-02 16:58:45 +08:00
```shell
goctl api go -api greet.api -dir greet
```
2020-08-09 21:32:23 +08:00
2021-02-02 16:58:45 +08:00
the generated files look like:
2020-08-19 12:43:14 +08:00
2021-02-02 16:58:45 +08:00
```Plain Text
├── greet
│ ├── etc
│ │ └── greet-api.yaml // configuration file
│ ├── greet.go // main file
│ └── internal
│ ├── config
│ │ └── config.go // configuration definition
│ ├── handler
│ │ ├── greethandler.go // get/put/post/delete routes are defined here
│ │ └── routes.go // routes list
│ ├── logic
│ │ └── greetlogic.go // request logic can be written here
│ ├── svc
│ │ └── servicecontext.go // service context, mysql/redis can be passed in here
│ └── types
│ └── types.go // request/response defined here
└── greet.api // api description file
```
2020-08-19 12:43:14 +08:00
2021-02-02 16:58:45 +08:00
the generated code can be run directly:
2020-09-08 09:24:12 +08:00
2021-02-02 16:58:45 +08:00
```shell
cd greet
go mod tidy
go run greet.go -f etc/greet-api.yaml
```
2020-09-28 16:58:29 +08:00
2022-01-22 12:20:11 +08:00
by default, it’ s listening on port 8888, while it can be changed in the configuration file.
2020-09-28 16:58:29 +08:00
2021-02-02 16:58:45 +08:00
you can check it by curl:
2020-09-28 16:58:29 +08:00
2021-02-02 16:58:45 +08:00
```shell
2021-02-03 10:18:28 +08:00
curl -i http://localhost:8888/greet/from/you
2021-02-02 16:58:45 +08:00
```
2021-01-09 00:17:23 +08:00
2022-01-22 12:20:11 +08:00
the response looks like below:
2020-08-14 15:31:10 +08:00
2021-02-02 16:58:45 +08:00
```http
HTTP/1.1 200 OK
Date: Sun, 30 Aug 2020 15:32:35 GMT
Content-Length: 0
```
2020-12-15 23:47:41 +08:00
2022-09-25 20:29:55 +05:30
5. Write the business logic code
2020-12-15 23:47:41 +08:00
2023-10-24 08:24:15 +05:30
* the dependencies can be passed into the logic within servicecontext.go, like mysql, redis, etc.
2022-01-22 12:20:11 +08:00
* add the logic code in a logic package according to .api file
2020-12-15 23:47:41 +08:00
2022-09-25 20:29:55 +05:30
6. Generate code like Java, TypeScript, Dart, JavaScript, etc. just from the api file
2020-08-09 21:32:23 +08:00
2021-02-02 16:58:45 +08:00
```shell
goctl api java -api greet.api -dir greet
goctl api dart -api greet.api -dir greet
...
```
2020-10-11 19:42:40 +08:00
2022-09-25 20:29:55 +05:30
## Benchmark
2020-10-11 19:42:40 +08:00
2021-09-24 11:31:00 +08:00

2020-10-11 19:42:40 +08:00
2021-02-02 16:58:45 +08:00
[Checkout the test code ](https://github.com/smallnest/go-web-framework-benchmark )
2020-10-29 15:32:08 +08:00
2022-09-25 20:29:55 +05:30
## Documents
2020-10-29 15:32:08 +08:00
2022-06-25 11:18:47 +08:00
* [Documents ](https://go-zero.dev/ )
2021-09-24 11:31:00 +08:00
* [Rapid development of microservice systems ](https://github.com/zeromicro/zero-doc/blob/main/doc/shorturl-en.md )
* [Rapid development of microservice systems - multiple RPCs ](https://github.com/zeromicro/zero-doc/blob/main/docs/zero/bookstore-en.md )
2021-02-08 22:23:36 +08:00
* [Examples ](https://github.com/zeromicro/zero-examples )
2020-10-31 20:11:12 +08:00
2025-12-12 22:28:47 +08:00
## Chat group
2020-10-29 15:32:08 +08:00
2022-02-25 23:02:09 +08:00
Join the chat via https://discord.gg/4JQvC5A4Fe
2021-05-08 21:55:14 +08:00
2025-12-12 22:28:47 +08:00
## Cloud Native Landscape
2021-10-11 15:31:29 +08:00
<p float="left">
2024-03-02 00:23:52 +08:00
<img src="https://raw.githubusercontent.com/zeromicro/zero-doc/main/doc/images/cncf-logo.svg" width="200"/>
<img src="https://raw.githubusercontent.com/zeromicro/zero-doc/main/doc/images/cncf-landscape-logo.svg" width="150"/>
2021-10-11 15:31:29 +08:00
</p>
go-zero enlisted in the [CNCF Cloud Native Landscape ](https://landscape.cncf.io/?selected=go-zero ).
2021-05-08 21:55:14 +08:00
## Give a Star! ⭐
2024-08-02 18:26:54 +08:00
If you like this project or are using it to learn or start your own solution, give it a star to get updates on new releases. Your support matters!