go-zero(一) 介绍和使用

go-zero 介绍和使用

一、什么是 go-zero?

go-zero 是一个基于 Go 语言的微服务框架,提供了高效、简单并易于扩展的 API 设计和开发模式。它主要目的是为开发者提供一种简单的方式来构建和管理云原生应用。

1.go-zero 的核心特性

  1. 高性能

    • go-zero 采用了 Go 语言的高并发特性,具有很高的性能,适合处理大量请求。
  2. 代码生成

    • 通过 goctl 工具,开发者可以根据定义的 API 规范自动生成相应的代码,包括路由、处理逻辑、数据模型等,提高开发效率。
  3. 微服务架构

    • 适合构建微服务架构的应用,支持服务的拆分、组合及独立开发部署。
  4. 中间件支持

    • 提供了灵活的中间件机制,可以用于日志、认证、限流、跨域等功能。
  5. 丰富的文档与社区支持

    • 提供完善的文档和示例,社区活跃,易于获取支持。

2. 总体架构

go-zero 的总体架构包括几个主要部分:

  • Framework(框架):提供服务的基本功能,包括 HTTP、RPC、API 网关等。
  • Config(配置):支持读取配置文件并提供配置管理。
  • Model(模型):与数据库交互的模型层,支持 ORM(对象关系映射)。
  • Middleware(中间件):提供各种中间件功能(如日志、认证等)。
  • Log(日志):集中管理日志功能的模块。
  • Gateway(网关):API 网关的实现,用于转发请求。
  • Etcd:支持服务注册和发现,基于 Etcd 实现微服务架构。

二、环境搭建

默认go为1.16以及之后的版本

1. 安装 goctl 工具

goctl 是go-zeron的开发利器,可以根据api文件生成代码和文档,可以根据sql生成model,以及生成部署k8s yaml、dockerfile等

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

2. 安装 protoc

protoc 用来根据 proto 文件生成RPC代码

goctl env check --install --verbose --force

3. 安装 go-zero

使用以下命令安装 go-zero:

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

三、构建第一个 API

1.hello word

在实际开发中,我们通常是根据 API 文件,使用 goctl 工具生成项目代码。为更好地了解 Go-Zero 的执行过程,我们首先使用 Go-Zero 创建一个简单的 HTTP 服务,输出一个 Hello World。。

创建一个hellowrod 目录,先创建hello.yaml的配置文件

Name: HelloWorld.api  # 服务名
Host: 127.0.0.1     # host地址
Port: 8080   #端口

然后创建 hello.go 文件:

package mainimport ("github.com/zeromicro/go-zero/core/conf""github.com/zeromicro/go-zero/rest""github.com/zeromicro/go-zero/rest/httpx""log""net/http"
)func main() {var restConf rest.RestConf  //rest.RestConf 是一个http服务配置结构体conf.MustLoad("helloword/hello.yaml", &restConf) //用来读取并解析配置s, err := rest.NewServer(restConf)  //根据配置启动一个新的服务if err != nil {log.Fatal(err)return}s.AddRoute(rest.Route{ // 添加路由Method: http.MethodGet,   //使用get方法Path:   "/hello/world",   //路径Handler: func(writer http.ResponseWriter, request *http.Request) { // 处理函数httpx.OkJson(writer, "Hello World!")   //返回一个Hello World!的json信息},})defer s.Stop()s.Start() // 启动服务
}

2. 启动服务

运行 go-zero 服务:

go run hello.go

使用 Postman 或 curl 进行 API 测试。

在这里插入图片描述

3.代码简单分析

初始化配置

var restConf rest.RestConf  //声明一个restConf变量,用于保存HTTP服务的配置

RestConf 是一个http服务配置结构体,在go-zero中具体实现为:

RestConf struct {service.ServiceConfHost     string `json:",default=0.0.0.0"`Port     int/*省略掉未用到的参数*/}

需要注意的是,YAML 配置文件的字段名必须与结构体字段一致,但不区分大小写。

go-zero能够自动将配置文件解析到结构体中:

	conf.MustLoad("helloword/hello.yaml", &restConf) //加载并解析配置文件hello.yaml

从go-zero代码中可以看到 ,它支持jsontomlyamlyml等四种格式。

var (fillDefaultUnmarshaler = mapping.NewUnmarshaler(jsonTagKey, mapping.WithDefault())loaders                = map[string]func([]byte, any) error{".json": LoadFromJsonBytes,".toml": LoadFromTomlBytes,".yaml": LoadFromYamlBytes,".yml":  LoadFromYamlBytes,}
)

创建HTTP服务器

`s, err := rest.NewServer(restConf)`//使用加载的配置创建新的HTTP服务器实例

添加路由

例如,以是一个简单的路由实现:

s:= rest.NewServer()
s.AddRoutes(routes) // routes 是定义好的路由
s.Start() 

go-zero 支持 RESTful 路由方式,可以在路由中定义处理的 HTTP 方法(GET、POST 等)。

	s.AddRoute(rest.Route{ Method: http.MethodGet,   //指定请求方法为GETPath:   "/hello/world",   //定义请求路径。Handler: func(writer http.ResponseWriter, request *http.Request) { 				// 处理函数httpx.OkJson(writer, "Hello World!")   //返回一个Hello World!的json信息},})

启动服务

s.Start()//启动HTTP服务器,开始监听和处理传入的请求。

4.go-zero服务执行流程

  1. 启动服务器: 通常在 main.go 中,您会初始化 rest.Server 实例,并调用 RegisterHandlers 函数来注册路由。

  2. 路由注册: 在 RegisterHandlers 中调用 AddRoutes 方法来将路由添加到服务器。这里注册的路由将用于处理特定的 HTTP 请求。

  3. 接收请求: 当客户端发送一个请求到 服务器会根据路径和请求方法查找对应的路由。

  4. 调用处理程序: 如果找到匹配的路由,服务器将会调用 UserHandler(serverCtx)。这个处理程序通常会接收 http.ResponseWriter*http.Request 参数。

  5. 执行业务逻辑: 在 UserHandler 函数内部,使用 serverCtx 访问全局配置、并执行相应的业务逻辑。

  6. 返回响应: 最后,处理程序会通过 http.ResponseWriter 返回相应的 HTTP 响应,包括设置状态码、响应头和响应体。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/18570.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

VUE+SPRINGBOOT实现邮箱注册、重置密码、登录功能

随着互联网的发展,网站用户的管理、触达、消息通知成为一个网站设计是否合理的重要标志。目前主流互联网公司都支持手机验证码注册、登录。但是手机短信作为服务端网站是需要付出运营商通信成本的,而邮箱的注册、登录、重置密码,无疑成为了这…

多目标优化算法:多目标蛇鹫优化算法(MOSBOA)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码

一、蛇鹫优化算法 蛇鹫优化算法(Secretary Bird Optimization Algorithm,简称SBOA)由Youfa Fu等人于2024年4月发表在《Artificial Intelligence Review》期刊上的一种新型的元启发式算法。该算法旨在解决复杂工程优化问题,特别是…

2024-11-15 Java开发工程师 内推

Java开发工程师 坐标:大连 岗位要求: 1、本科以上学历,计算机相关专业 2、22/23/24届毕业生 小结:有意向的私信发简历

Python绘制雪花

文章目录 系列目录写在前面技术需求完整代码代码分析1. 代码初始化部分分析2. 雪花绘制核心逻辑分析3. 窗口保持部分分析4. 美学与几何特点总结 写在后面 系列目录 序号直达链接爱心系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4…

当 docker-compose.yaml 文件部署时,Dify 线上版本升级过程

如果线上 Dify 是通过 docker-compose.yaml 文件部署的,那么当 Dify 版本升级时该如何操作呢?官方已经给出了 Docker compose 和 Source Code 两种方式。相对而言,前者更简单些,至少不需要安装依赖包和迁移数据库文件。为了更加具…

RHCSA学习超详细知识点2命令篇

输入命令行的语法 终端中执行命令需要遵照一定的语法,输入命令的格式如下: 命令 参数命令 -选项 参数 输入命令时可以包含多个选项,假如一个命令有-a,-b,-c,-d四个选项,可以写作 命令 -a -b -c -d 参数 这里的多个选项可以“提…

小米路由器用外网域名访问管理界面

本文在Redmi AX3000 (RA81)设置,其他型号路由器的管理界面端口可能各不相同。 开始之前需要保证路由器SSH功能正常,如果没有SSH可以参考这里。 1. 给WAN口开放80端口 可以通过下载mixbox的firewall插件或者其他防火墙插件开放端口。 2. 把域名解析到路…

✅DAY27贪心算法 | 455.分发饼干 | 376. 摆动序列 | 53. 最大子序和

一、贪心算法 核心理念是每一步都做出局部最优选择,以期最终得到全局最优解。它通常用于求解一些最优化问题,例如最小生成树、最短路径、背包问题等。 二、贪心算法的步骤 1. 定义选择标准:确定每一步如何选择当前最优解。 2. 验证贪心策…

无人机+无人车+机器狗:城市巷战突破技术详解

在城市巷战中,无人机、无人车和机器狗的组合可以形成一种全新的战场突破技术,这种组合能够大幅提升作战效率,减少人员伤亡。以下是对这一技术的详细解析: 一、无人机的作用 1.空中侦察:无人机能够提供高空视角&#x…

智慧环保之环境网格化监测解决方案

1. 引言 智慧环保网格化监测解决方案,旨在通过先进的信息技术手段,实现环境质量的全面、精准、实时监测,为环境治理提供科学依据和决策支持。 2. 背景与挑战 当前,环境污染问题日益严峻,治理难度不断加大。传统监测手…

vue2+3 —— Day5/6

自定义指令 自定义指令 需求&#xff1a;当页面加载时&#xff0c;让元素获取焦点&#xff08;一进页面&#xff0c;输入框就获取焦点&#xff09; 常规操作&#xff1a;操作dom “dom元素.focus()” 获取dom元素还要用ref 和 $refs <input ref"inp" type&quo…

2024 RISC-V 中国峰会 演讲幻灯片和视频回放 均已公开

目录 一、幻灯片地址&#xff1a; 二、演讲视频&#xff1a; 一、幻灯片地址&#xff1a; RVSC2024/slides at main cnrv/RVSC2024 GitHub 二、演讲视频&#xff1a; RISC-V国际基金会的个人空间-RISC-V国际基金会个人主页-哔哩哔哩视频 参考&#xff1a; 1、RISC-V 中…

sudu问题 --> 添加用户到系统配置文件里面

我们重新创建一个用户lisi 密码&#xff1a;lisixxxxxxxx 重新连接&#xff0c;输入用户&#xff0c;输入密码 是不行的 我们输入exit退出 打开文件 再切换身份&#xff0c;切换为超级管理员root 输入密码 再打开 我们打开后设置行号在50行左右可以看到我们的目标 我们再进行…

C++: string(二)

✨✨ 欢迎大家来到我的文章✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 分类专栏&#xff1a;c 我的主页&#xff1a;tyler s blog 文章目录 一 string的成员函数1 insert2 resize3assign4erase5replace6 find(1) find(2)rfind…

【无人机设计与控制】基于MATLAB的四旋翼无人机PID双闭环控制研究

摘要 本文基于MATLAB/Simulink环境&#xff0c;对四旋翼无人机进行了PID双闭环控制设计与仿真研究。通过分析四旋翼无人机的动力学模型与运动学模型&#xff0c;建立了姿态和位置双闭环控制系统&#xff0c;以实现无人机的稳定飞行与精确轨迹跟踪。仿真实验验证了该控制策略的…

DimensionX 部署笔记

目录 生成视频用CogVideoX-5b-I2V 推理代码&#xff1a; DimensionX 生成视频用CogVideoX-5b-I2V 推理代码&#xff1a; 可以生成&#xff0c;从左向右旋转的&#xff0c;也可以生成从上往下旋转的&#xff1a; import torch from diffusers import CogVideoXImageToVideo…

如何利用SAP低代码平台快速构建企业级应用?

SAP作为全球领先的企业管理软件解决方案提供商&#xff0c;一直致力于为企业提供全面且高效的业务管理工具。随着技术的快速发展&#xff0c;传统的开发方式已经无法满足企业在快速变化的市场环境下的需求。低代码开发平台应运而生&#xff0c;它通过简化应用程序的创建过程&am…

拉取docker镜像应急方法

发现许多docker hub镜像网址速度也慢得发指啦&#xff0c;如果想速度快点&#xff0c;可以考虑买个按量计费的公有云服务器&#xff0c;用他们的内网镜像&#xff0c;然后再导出&#xff0c;然后传到本地。 开通服务器 可以考虑个开通最低配的&#xff0c;这里我用的是腾讯的…

Ubuntu下的Eigen库的安装及基本使用教程

一、Eigen库介绍 简介 Eigen [1]目前最新的版本是3.4&#xff0c;除了C标准库以外&#xff0c;不需要任何其他的依赖包。Eigen使用的CMake建立配置文件和单元测试&#xff0c;并自动安装。如果使用Eigen库&#xff0c;只需包特定模块的的头文件即可。 基本功能 Eigen适用范…

Ansible一键部署Kubernetes集群

一、环境准备 主机 ip地址 角色 k8s-master 192.168.252.141 master k8s-node1 192.168.252.142 node k8s-node2 192.168.252.143 node 二、实战 Ansible部署 主节点安装Ansible yum -y install epel-release yum -y install ansible ansible --version 开启记…