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
2025-12-13 13:01:35 +08:00
In early 2018, we transitioned from a Java+MongoDB monolithic architecture to microservices, choosing:
2020-07-28 16:29:13 +08:00
2025-12-13 13:01:35 +08:00
* **Golang** - High performance, simple syntax, excellent deployment experience, and low resource consumption
* **Self-designed microservice framework** - Better problem isolation, easier feature extension, and faster issue resolution
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
2025-12-13 13:01:35 +08:00
go-zero follows these core design principles:
2020-07-28 16:29:13 +08:00
2025-12-13 13:01:35 +08:00
* **Simplicity** - Keep it simple, first principle
* **High availability** - Stable under high concurrency
* **Resilience** - Failure-oriented programming with adaptive protection
* **Developer friendly** - Encapsulate complexity, one way to do one thing
* **Easy to extend** - Flexible architecture for growth
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
2025-12-13 13:01:35 +08:00
go-zero integrates engineering best practices:
2020-07-28 16:29:13 +08:00
2025-12-13 13:01:35 +08:00
* **Code generation** - Powerful tools to minimize boilerplate
* **Simple API** - Clean interfaces, fully compatible with net/http
* **High performance** - Optimized for speed and efficiency
* **Resilience** - Built-in circuit breaker, rate limiting, load shedding, timeout control
* **Service mesh** - Service discovery, load balancing, call tracing
* **Developer tools** - Auto parameter validation, cache management, metrics and monitoring
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-13 13:01:35 +08:00
## Architecture 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
2025-12-13 13:01:35 +08:00
The go-zero team provides AI tooling for Claude, GitHub Copilot, Cursor to generate framework-compliant code.
2025-12-12 22:28:47 +08:00
### Three Core Projects
2025-12-13 13:01:35 +08:00
**[ai-context ](https://github.com/zeromicro/ai-context )** - Workflow guide for AI assistants
2025-12-12 22:28:47 +08:00
2025-12-13 13:01:35 +08:00
**[zero-skills ](https://github.com/zeromicro/zero-skills )** - Pattern library with examples
2025-12-12 22:28:47 +08:00
2025-12-13 13:01:35 +08:00
**[mcp-zero ](https://github.com/zeromicro/mcp-zero )** - Code generation tools via Model Context Protocol
2025-12-12 22:28:47 +08:00
### Quick Setup
#### GitHub Copilot
```bash
git submodule add https://github.com/zeromicro/ai-context.git .github/ai-context
2025-12-13 13:01:35 +08:00
ln -s ai-context/00-instructions.md .github/copilot-instructions.md # macOS/Linux
# Windows: mklink .github\copilot-instructions.md .github\ai-context\00-instructions.md
git submodule update --remote .github/ai-context # Update
2025-12-12 22:28:47 +08:00
```
#### Cursor
```bash
git submodule add https://github.com/zeromicro/ai-context.git .cursorrules
2025-12-13 13:01:35 +08:00
git submodule update --remote .cursorrules # Update
2025-12-12 22:28:47 +08:00
```
2025-12-13 13:01:35 +08:00
#### Windsurf
2025-12-12 22:28:47 +08:00
```bash
git submodule add https://github.com/zeromicro/ai-context.git .windsurfrules
2025-12-13 13:01:35 +08:00
git submodule update --remote .windsurfrules # Update
2025-12-12 22:28:47 +08:00
```
2025-12-13 13:01:35 +08:00
#### Claude Desktop
2025-12-12 22:28:47 +08:00
```bash
2025-12-13 13:01:35 +08:00
git clone https://github.com/zeromicro/mcp-zero.git && cd mcp-zero && go build
# Configure: ~/Library/Application Support/Claude/claude_desktop_config.json
# Or: claude mcp add --transport stdio mcp-zero --env GOCTL_PATH=/path/to/goctl -- /path/to/mcp-zero
2025-12-12 22:28:47 +08:00
```
### How It Works
2025-12-13 13:01:35 +08:00
AI assistants use these tools together:
1. **ai-context ** - workflow guidance
2. **zero-skills ** - implementation patterns
3. **mcp-zero ** - real-time code generation
2025-12-12 22:28:47 +08:00
2025-12-13 13:01:35 +08:00
**Example**: Creating a REST API → AI reads **ai-context ** for workflow → calls **mcp-zero ** to generate code → references **zero-skills ** for patterns → produces production-ready code ✅
2025-12-12 22:28:47 +08:00
## Quick Start
2020-09-04 15:40:12 +08:00
2025-12-13 13:01:35 +08:00
1. Full examples:
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
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
2025-12-13 13:01:35 +08:00
Ensure goctl is executable and in your $PATH.
2025-12-12 22:28:47 +08:00
2025-12-13 13:01:35 +08:00
3. Create the API file (greet.api):
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
2025-12-13 13:01:35 +08:00
Generate .api template:
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
2025-12-13 13:01:35 +08:00
4. Generate Go server 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
2025-12-13 13:01:35 +08:00
Generated structure:
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
2025-12-13 13:01:35 +08:00
Run the service:
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
2025-12-13 13:01:35 +08:00
Default port: 8888 (configurable in etc/greet-api.yaml)
2020-09-28 16:58:29 +08:00
2025-12-13 13:01:35 +08:00
Test with 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
2025-12-13 13:01:35 +08:00
Response:
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
2025-12-13 13:01:35 +08:00
5. Write business logic
2020-12-15 23:47:41 +08:00
2025-12-13 13:01:35 +08:00
* Pass dependencies (mysql, redis, etc.) via servicecontext.go
* Add logic code in the logic package per .api definition
2020-12-15 23:47:41 +08:00
2025-12-13 13:01:35 +08:00
6. Generate client code for multiple languages
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!