go-zero README

The project's README from github.com/zeromicro/go-zero. As one markdown file: README.md.

go-zero

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.

codecov Go Report Card Release Go Reference Awesome Go License: MIT Discord

🤷‍ What is go-zero?

English | 简体中文 | 한국어

zeromicro%2Fgo-zero | Trendshift go-zero - A web & rpc framework written in Go. | Product Hunt

go-zero (listed in CNCF Landscape: 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.

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.

Advantages of go-zero:

Architecture

Backgrounds of go-zero

In early 2018, we transitioned from a Java+MongoDB monolithic architecture to microservices, choosing:

Design considerations on go-zero

go-zero follows these core design principles:

The implementation and features of go-zero

go-zero integrates engineering best practices:

Resilience

Architecture with go-zero

image

Installation

Run the following command under your project:

go get -u github.com/zeromicro/go-zero

AI-Native Development

The go-zero team provides workflow guidance and implementation patterns for AI coding assistants such as Claude Code, GitHub Copilot, and Cursor. For assistants with terminal access, the recommended workflow is to run goctl directly to generate framework-compliant code.

AI Tooling Projects

Quick Setup

Install goctl and ensure it is available in your $PATH:

go install github.com/zeromicro/go-zero/tools/goctl@latest
goctl --version

Follow the ai-context setup guide and zero-skills integration guides to configure your assistant's workflow instructions and pattern library.

How It Works

  1. Consult ai-context for the workflow and zero-skills for relevant patterns.
  2. Define the .api or .proto specification, then run goctl in the terminal to generate code.
  3. Implement business logic, resolve dependencies, build, and test the service.

Example: Create a REST API → write the .api specification → run goctl api go → implement the logic using zero-skills patterns → run go mod tidy, go build ./..., and go test ./....

Optional MCP Integration

For clients that use MCP tools, such as Claude Desktop, configure mcp-zero to invoke goctl through MCP. It uses the same code generation engine; assistants with terminal access can use the direct workflow above without an MCP server.

Quick Start

  1. Full examples:

    Rapid development of microservice systems

    Rapid development of microservice systems - multiple RPCs

  2. Install goctl

    # for Go
    go install github.com/zeromicro/go-zero/tools/goctl@latest
    
    # For Mac
    brew install goctl
    
    # docker for all platforms
    docker pull kevinwan/goctl
    # run goctl
    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):

    type (
      Request {
        Name string `path:"name,options=[you,me]"` // parameters are auto validated
      }
    
      Response {
        Message string `json:"message"`
      }
    )
    
    service greet-api {
      @handler GreetHandler
      get /greet/from/:name(Request) returns (Response)
    }
    

    Generate .api template:

    goctl api -o greet.api
    
  4. Generate Go server code

    goctl api go -api greet.api -dir greet
    

    Generated structure:

    ├── 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
    

    Run the service:

    cd greet
    go mod tidy
    go run greet.go -f etc/greet-api.yaml
    

    Default port: 8888 (configurable in etc/greet-api.yaml)

    Test with curl:

    curl -i http://localhost:8888/greet/from/you
    

    Response:

    HTTP/1.1 200 OK
    Date: Sun, 30 Aug 2020 15:32:35 GMT
    Content-Length: 0
    
  5. Write business logic

    • Pass dependencies (mysql, redis, etc.) via servicecontext.go
    • Add logic code in the logic package per .api definition
  6. Generate client code for multiple languages

    goctl api java -api greet.api -dir greet
    goctl api dart -api greet.api -dir greet
    ...
    

Benchmark

benchmark

Checkout the test code

Documents

Chat group

Join the chat via https://discord.gg/4JQvC5A4Fe

Cloud Native Landscape

   

go-zero enlisted in the CNCF Cloud Native Landscape.

Give a Star! ⭐

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!

go-zero (zeromicro/go-zero)

Searching Database…

33.4K ·GitHub
这是什么?go-zero 是一个云原生的 Go 框架,用于构建 Web 和 RPC 微服务,内置了大量工程实践。它多年来一直在为拥有数千万用户规模的网站提供服务,并已被收录于 CNCF Landscape。
它是一个框架,还是独立的命令行工具?两者都是:核心是一个面向 Go 的 Web 和 RPC 框架,同时还自带 goctl 这个命令行工具,能把简单的 .api 描述文件转换成生成的代码。
我怎么才能把一个服务跑起来?用 go-zero 简单的 .api 语法描述你的服务,然后运行 goctl——一条命令就能生成服务代码,你只需在框架之上编写自己的业务逻辑。
它会强迫我放弃标准的 Go HTTP 技术栈吗?不会——它简洁的 API 保证了与 net/http 的完全兼容,内置的中间件也可以集成到你自己的框架里。
它是面向大型生产系统,还是个人业余项目?它面向的是高负载的生产服务:go-zero 专为高并发下的稳定性而设计,官方列举的服务拥有数千万日活跃用户。
除了 Go,goctl 还能生成哪些语言?从同样的 .api 文件,它可以生成 Go、iOS、Android、Kotlin、Dart、TypeScript 和 JavaScript,这样 Web 和移动端客户端可以直接从服务定义中获得 SDK。
为什么团队不使用现有框架,而是自己造了一个?2018 年初,他们把一个 Java+MongoDB 的单体应用迁移到微服务:出于高性能和低资源消耗的考虑选择了 Go,并自行设计框架,以便更好地隔离问题、更快地定位和解决故障。
不自己写稳定性代码,开箱能直接得到哪些能力?链式超时控制、并发控制、限流、自适应熔断和自适应降载都是内置的,通常无需任何配置;服务发现、负载均衡和调用链追踪也同样包含在内。
它能帮我校验传入的请求吗?可以——客户端请求参数会自动完成校验,这也是内置开发工具之一,另外还有缓存管理以及指标监控等功能。
What are similar projects?kratos, gofr, spring-cloud-alibaba, fiber, grpc-gateway, echo, resty, chi
Creator
zeromicro
Size
32.4 MB
Stars
33.4K
Age
6y
Commits · 90 Days