自学内容网 自学内容网

go-zero快速入门

 go-zero 介绍

go-zero是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。

go-zero 包含简单的 API 描述语法和名为 的代码生成工具。您可以使用 .goctl goctl

go-zero 的优点:

  • 提高日活跃用户数千万的服务的稳定性
  • 内置链式超时控制、并发控制、限速、自适应熔断、自适应减载,甚至无需配置
  • 内置中间件也可以集成到您的框架中
  • 简单的 API 语法,一个命令生成几种不同的语言
  • 自动验证来自客户端的请求参数
  • 大量内置微服务管理和并发工具包

架构图

 go-zero 框架背景

  • 基于 Go 语言
    • 高效的性能
    • 简洁的语法
    • 广泛验证的工程效率
    • 部署简单

go-zero 框架设计

对于微服务框架的设计,保障微服务稳定性,同时也要特别注重研发效率,有一些准则:

  • 保持简单,第一原则
  • 弹性设计,面向故障编程
  • 工具大于约定和文档
  • 高可用、高并发、易扩展
  • 对业务开发友好,封装复杂度
  • 约束做一件事只有一种方式

go-zero 特点

go-zero 是一个集成了各种工程实践的包含 web 和 rpc 框架,有如下主要特点:

  • 强大的工具支持,尽可能少的代码编写
  • 高可用
  • 高并发支撑

如下图,我们从多个层面保障了整体服务的高可用:

弹性设计

使用 go-zero 的基本示例

  1. 安装 goctl 工具

    goctl 读作 go control,不要读成 go C-T-Lgoctl 的意思是不要被代码控制,而是要去控制它。其中的 go 不是指 golang

    GOPROXY=https://goproxy.cn/,direct go install github.com/zeromicro/go-zero/tools/goctl@latest

    确保 goctl 可执行,并且在 $PATH 环境变量里。

  2. 创建 API 文件,如 greet.api,可以安装 goctl 的插件,支持 API 语法。

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

    .api 文件也可以由 goctl 生成,如下所示:

    goctl api -o greet.api
  3. 生成 Go 服务器端代码

    goctl api go -api greet.api -dir greet

    生成的文件如下所示:

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

    生成的代码可以直接运行:

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

    默认情况下,它监听端口 8888,但可以在 Configuration File 中更改。

    您可以通过 curl 检查它:

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

    响应如下所示:

    HTTP/1.1 200 OK
    Date: Sun, 30 Aug 2020 15:32:35 GMT
    Content-Length: 0
  4. 编写业务逻辑代码

    • 依赖项可以传递到 ServiceContext.go 中的逻辑中,如 MySQL、Redis 等。
    • 根据 .api 文件在 logic package 中添加 logic code
  •  goctl 插件

    插件用途
    goctl-swagger一键生成 api 的 swagger 文档


原文地址:https://blog.csdn.net/m0_66316879/article/details/143987573

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!