A cloud-native Go microservices framework with cli tool for productivity.
A cloud-native Go microservices framework with cli tool for productivity.
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 (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.
In early 2018, we transitioned from a Java+MongoDB monolithic architecture to microservices, choosing:
go-zero follows these core design principles:
go-zero integrates engineering best practices:
Run the following command under your project:
go get -u github.com/zeromicro/go-zeroThe 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.
Install goctl and ensure it is available in your $PATH:
go install github.com/zeromicro/go-zero/tools/goctl@latest
goctl --versionFollow the ai-context setup guide and zero-skills integration guides to configure your assistant's workflow instructions and pattern library.
.api or .proto specification, then run goctl in the terminal to generate code.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 ./....
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.
Full examples:
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 --helpEnsure goctl is executable and in your $PATH.
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.apiGenerate Go server code
goctl api go -api greet.api -dir greetGenerated structure:
…Run the service:
cd greet
go mod tidy
go run greet.go -f etc/greet-api.yamlDefault port: 8888 (configurable in etc/greet-api.yaml)
Test with curl:
curl -i http://localhost:8888/greet/from/youResponse:
HTTP/1.1 200 OK
Date: Sun, 30 Aug 2020 15:32:35 GMT
Content-Length: 0Write business logic
Generate client code for multiple languages
goctl api java -api greet.api -dir greet
goctl api dart -api greet.api -dir greet
...Join the chat via https://discord.gg/4JQvC5A4Fe
go-zero enlisted in the CNCF Cloud Native Landscape.
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!
Bug: collection.Cache can retain entries without expiry timers after concurrent Set calls
Bug: filex.SplitLineChunks returns EOF error when the last line is longer than the preferred chunk size
Bug: TimingWheel.MoveTimer can fire one revolution early or late
Bug:filex.LastLine returns a wrong line when the content after the last separator is a multiple of 1024 bytes
Error Overwrite When Calling Multiple Functions in mr.Finish
Dial-up error encountered when trying DNS resolution
Wanted: who's using go-zero? / 您在使用 go-zero 吗?
Feature Request: Support route rewrite in http gateway mappings
redis.Redis didn't implement redisNode interface
Should the HTTP Gateway be more flexible?