Files
go-zero/readme.md

279 lines
10 KiB
Markdown
Raw Normal View History

2020-08-19 17:01:22 +08:00
# go-zero
<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
go-zero is a web and rpc framework with lots of builtin engineering practices. Its 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>
[![codecov](https://codecov.io/gh/zeromicro/go-zero/branch/master/graph/badge.svg)](https://codecov.io/gh/zeromicro/go-zero)
[![Go Report Card](https://goreportcard.com/badge/github.com/zeromicro/go-zero)](https://goreportcard.com/report/github.com/zeromicro/go-zero)
[![Release](https://img.shields.io/github/v/release/zeromicro/go-zero.svg?style=flat-square)](https://github.com/zeromicro/go-zero)
2022-05-07 10:08:25 +08:00
[![Go Reference](https://pkg.go.dev/badge/github.com/zeromicro/go-zero.svg)](https://pkg.go.dev/github.com/zeromicro/go-zero)
[![Awesome Go](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/avelino/awesome-go)
2020-08-15 15:16:57 +08:00
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
2022-02-25 23:01:15 +08:00
[![Discord](https://img.shields.io/discord/794530774463414292?label=chat&logo=discord)](https://discord.gg/4JQvC5A4Fe)
2022-05-07 10:11:21 +08:00
</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>
<a href="https://www.producthunt.com/posts/go-zero?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-go&#0045;zero" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=334030&theme=light" alt="go&#0045;zero - A&#0032;web&#0032;&#0038;&#0032;rpc&#0032;framework&#0032;written&#0032;in&#0032;Go&#0046; | 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. Its 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
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
#### 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
<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
## Backgrounds of go-zero
2020-07-28 16:29:13 +08:00
In early 2018, we transitioned from a Java+MongoDB monolithic architecture to microservices, choosing:
2020-07-28 16:29:13 +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
## Design considerations on go-zero
2020-07-28 16:29:13 +08:00
go-zero follows these core design principles:
2020-07-28 16:29:13 +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
## The implementation and features of go-zero
2020-07-28 16:29:13 +08:00
go-zero integrates engineering best practices:
2020-07-28 16:29:13 +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
![Resilience](https://raw.githubusercontent.com/zeromicro/zero-doc/main/doc/images/resilience-en.png)
2020-07-28 16:29:13 +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
## Installation
Run the following command under your project:
2020-08-08 13:40:11 +08:00
2020-08-20 10:44:14 +08:00
```shell
go get -u github.com/zeromicro/go-zero
2020-08-20 10:44:14 +08:00
```
2020-08-08 13:40:11 +08:00
## AI-Native Development
The go-zero team provides AI tooling for Claude, GitHub Copilot, Cursor to generate framework-compliant code.
### Three Core Projects
**[ai-context](https://github.com/zeromicro/ai-context)** - Workflow guide for AI assistants
**[zero-skills](https://github.com/zeromicro/zero-skills)** - Pattern library with examples
**[mcp-zero](https://github.com/zeromicro/mcp-zero)** - Code generation tools via Model Context Protocol
### Quick Setup
#### GitHub Copilot
```bash
git submodule add https://github.com/zeromicro/ai-context.git .github/ai-context
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
```
#### Cursor
```bash
git submodule add https://github.com/zeromicro/ai-context.git .cursorrules
git submodule update --remote .cursorrules # Update
```
#### Windsurf
```bash
git submodule add https://github.com/zeromicro/ai-context.git .windsurfrules
git submodule update --remote .windsurfrules # Update
```
#### Claude Desktop
```bash
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
```
### How It Works
AI assistants use these tools together:
1. **ai-context** - workflow guidance
2. **zero-skills** - implementation patterns
3. **mcp-zero** - real-time code generation
**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 ✅
## Quick Start
2020-09-04 15:40:12 +08:00
1. Full examples:
2020-08-31 22:37:43 +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
[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
```shell
2023-03-10 22:18:48 +08:00
# for Go
go install github.com/zeromicro/go-zero/tools/goctl@latest
2022-05-28 14:39:25 +08:00
# For Mac
brew install goctl
# docker for all platforms
2022-04-05 11:51:09 +08:00
docker pull kevinwan/goctl
# run goctl
2024-03-02 16:40:31 +01:00
docker run --rm -it -v `pwd`:/app kevinwan/goctl --help
```
Ensure goctl is executable and in your $PATH.
3. Create the API file (greet.api):
```go
type (
Request {
2023-01-03 23:14:39 +08:00
Name string `path:"name,options=[you,me]"` // parameters are auto validated
}
2023-02-23 14:36:58 +08:00
Response {
Message string `json:"message"`
}
)
2023-02-23 14:36:58 +08:00
service greet-api {
@handler GreetHandler
2021-08-11 10:51:28 +08:00
get /greet/from/:name(Request) returns (Response)
}
```
2023-02-23 14:36:58 +08:00
Generate .api template:
2020-08-08 13:40:11 +08:00
```shell
goctl api -o greet.api
```
2023-02-23 14:36:58 +08:00
4. Generate Go server code
```shell
goctl api go -api greet.api -dir greet
```
2020-08-09 21:32:23 +08:00
Generated structure:
2020-08-19 12:43:14 +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
Run the service:
2020-09-08 09:24:12 +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
Default port: 8888 (configurable in etc/greet-api.yaml)
2020-09-28 16:58:29 +08:00
Test with curl:
2020-09-28 16:58:29 +08:00
```shell
curl -i http://localhost:8888/greet/from/you
```
2021-01-09 00:17:23 +08:00
Response:
2020-08-14 15:31:10 +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
5. Write business logic
2020-12-15 23:47:41 +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
6. Generate client code for multiple languages
2020-08-09 21:32:23 +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
## Benchmark
2020-10-11 19:42:40 +08:00
![benchmark](https://raw.githubusercontent.com/zeromicro/zero-doc/main/doc/images/benchmark.png)
2020-10-11 19:42:40 +08:00
[Checkout the test code](https://github.com/smallnest/go-web-framework-benchmark)
2020-10-29 15:32:08 +08:00
## Documents
2020-10-29 15:32:08 +08:00
2022-06-25 11:18:47 +08:00
* [Documents](https://go-zero.dev/)
* [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)
* [Examples](https://github.com/zeromicro/zero-examples)
2020-10-31 20:11:12 +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
## Cloud Native Landscape
2021-10-11 15:31:29 +08:00
<p float="left">
<img src="https://raw.githubusercontent.com/zeromicro/zero-doc/main/doc/images/cncf-logo.svg" width="200"/>&nbsp;&nbsp;&nbsp;
<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!