go-zero(一) 介绍和使用
go-zero 介绍和使用
一、什么是 go-zero?
go-zero 是一个基于 Go 语言的微服务框架,提供了高效、简单并易于扩展的 API 设计和开发模式。它主要目的是为开发者提供一种简单的方式来构建和管理云原生应用。
1.go-zero 的核心特性
-
高性能:
- go-zero 采用了 Go 语言的高并发特性,具有很高的性能,适合处理大量请求。
-
代码生成:
- 通过
goctl
工具,开发者可以根据定义的 API 规范自动生成相应的代码,包括路由、处理逻辑、数据模型等,提高开发效率。
- 通过
-
微服务架构:
- 适合构建微服务架构的应用,支持服务的拆分、组合及独立开发部署。
-
中间件支持:
- 提供了灵活的中间件机制,可以用于日志、认证、限流、跨域等功能。
-
丰富的文档与社区支持:
- 提供完善的文档和示例,社区活跃,易于获取支持。
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代码中可以看到 ,它支持json
、toml
、 yaml
、yml
等四种格式。
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服务执行流程
-
启动服务器: 通常在
main.go
中,您会初始化rest.Server
实例,并调用RegisterHandlers
函数来注册路由。 -
路由注册: 在
RegisterHandlers
中调用AddRoutes
方法来将路由添加到服务器。这里注册的路由将用于处理特定的 HTTP 请求。 -
接收请求: 当客户端发送一个请求到 服务器会根据路径和请求方法查找对应的路由。
-
调用处理程序: 如果找到匹配的路由,服务器将会调用
UserHandler(serverCtx)
。这个处理程序通常会接收http.ResponseWriter
和*http.Request
参数。 -
执行业务逻辑: 在
UserHandler
函数内部,使用serverCtx
访问全局配置、并执行相应的业务逻辑。 -
返回响应: 最后,处理程序会通过
http.ResponseWriter
返回相应的 HTTP 响应,包括设置状态码、响应头和响应体。
相关文章:
go-zero(一) 介绍和使用
go-zero 介绍和使用 一、什么是 go-zero? go-zero 是一个基于 Go 语言的微服务框架,提供了高效、简单并易于扩展的 API 设计和开发模式。它主要目的是为开发者提供一种简单的方式来构建和管理云原生应用。 1.go-zero 的核心特性 高性能: g…...
buuoj WEB做题笔记
[极客大挑战 2019]EasySQL password输入存在注入: 123or 11 -- flag{68144110-18b9-4882-93f1-6f6e7b1c67ec} [极客大挑战 2019]Havefun 看网页源码,发现尾部有一段注释得代码,尝试 /?catdog,回显得flag{01c680f5-0d62-4e2c-a805-cfcf6b…...
使用SaaS化的Aurora应用快速搭建私人ChatGPT助手
使用SaaS化的Aurora应用快速搭建私人ChatGPT助手 简介: Aurora是一个带UI且免费的GPT私人聊天助手,可切换GPT-3.5,4,4o等常用版本。用户可通过部署Aurora,快速打造自己专属的AI助手。阿里云计算巢已将Aurora打包为SaaS…...
用sqlmap工具打sqli-labs前20关靶场
这个星期我们用手动注入打了前20关靶场,今天我们用sqlmap直接梭哈前20关 1.介绍sqlmap sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL和SQL注入漏洞。 2.下载和使用sqlmap 官方下载地址:GitHub - sq…...
Spark SQL大数据分析快速上手-完全分布模式安装
【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 Hadoop完全分布式环境搭建步骤-CSDN博客,前置环境安装参看此博文 完全分布模式也叫集群模式。将Spark目…...
弹幕发送功能‘简单’实现
导入依赖 <!-- websocket弹幕依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>后端代码 package com.by.danmaku;import org.springfra…...
springboot基于SpringBoot的校园招聘网站的设计与实现现
摘 要 校园招聘网站是一个专门为高校毕业生和用人单位提供就业与招聘信息的网络平台。该网站通过现代互联网技术,实现了职位信息的发布、简历投递、在线沟通等功能,极大地方便了企业和学生之间的互动。在设计上,网站注重用户体验,…...
徒手从零搭建一套ELK日志平台
徒手从零搭建一套ELK日志平台 日志分析的概述日志分析的作用主要收集工具集中式日志系统主要特点采集日志分类ELK概述初级版ELK终极版ELK高级版ELKELK收集日志的两种形式 搭建ELK平台Logstash工作原理Logstash核心概念环境准备安装部署docker添加镜像加速器安装部署Elasticsear…...
java八股-SpringCloud微服务-Eureka理论
文章目录 SpringCloud架构Eureka流程Nacos和Eureka的区别是?CAP定理Ribbon负载均衡策略自定义负载均衡策略如何实现?本章小结 SpringCloud架构 Eureka流程 服务提供者向Eureka注册服务信息服务消费者向注册中心拉取服务信息服务消费者使用负载均衡算法挑…...
Git 多仓库提交用户信息动态设置
Git 多仓库提交用户信息动态设置 原文地址:dddhl.cn 前言 在日常开发中,我们可能需要同时管理多个远程仓库(如 GitHub、Gitee、GitLab),而每个仓库使用不同的邮箱和用户名。比如,GitHub 和 Gitee 使用相…...
CPU详细介绍
CPU(中央处理器,Central Processing Unit)是计算机系统的核心部件之一,被称为计算机的“大脑”。它负责执行计算机程序中的各种指令,并管理和协调计算机系统的各个硬件组件。以下是对 CPU 的详细介绍,包括其…...
kafka中的数据清理策略
Kafka 中的数据清理策略主要用于控制数据的保留时间和存储空间,确保系统不会因为数据积累过多而影响性能。Kafka 提供了两种主要的数据清理策略: 1、基于时间的清理策略: 配置参数:log.retention.hours 或 log.retention.ms工作…...
django基于Django的二手电子设备交易平台设计与开发
摘 要 科学技术日新月异,人们的生活都发生了翻天覆地的变化,二手电子设备交易平台管理当然也不例外。过去的信息管理都使用传统的方式实行,既花费了时间,又浪费了精力。在信息如此发达的今天,我们可以通过网络这个媒介…...
WPF如何全局应用黑白主题效果
灰白色很多时候用于纪念,哀悼等。那么使用 WPF如何来做到这种效果呢?要实现的这种效果,我们会发现,它其实不仅仅是要针对图片,而是要针对整个窗口来实现灰白色。 如果只是针对图片的话,我可以可以对图片进…...
软件测试之测试用例扩展
软件测试之测试用例扩展 1. 测试用例覆盖2. UI布局覆盖3. 兼容性覆盖4. 测试用例条数 1. 测试用例覆盖 规则覆盖UI布局兼容性 2. UI布局覆盖 2条用例即可 布局, 颜色与原型图一致图片和文字描述无误 3. 兼容性覆盖 测试5大浏览器 火狐谷歌ieEge苹果 4. 测试用例条数 使…...
【Apache Paimon】-- 2 -- 核心特性 (0.9.0)
目录 1、实时更新 1.1、实时大批量更新 1.2、支持定义合并引擎 1.3、支持定义更新日志生成器 2、海量数据追加处理 2.1、append table 2.2、快速查询 3、数据湖功能(类比:hudi、iceberg、delta) 3.1、支持 ACID 事务 3.2、支持 Time travel(时间旅行) 3.3、支持…...
Mybatis入门
在学习MyBatis之前先了解一下什么是Mybatis?它能解决什么问题? 什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。 Mybatis解决什么问题? MyBatis 免除了几乎所有的 JDBC…...
智能方法求解-圆环内传感器节点最大最小距离分布
本篇文章是博主在最优化、人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在最优化算…...
Python Matplotlib 安装指南:使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装
Python Matplotlib 安装指南:使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装 Matplotlib是Python最常用的数据可视化工具之一,结合Miniconda可以轻松管理安装和依赖项。在这篇文章中,我们将详细介绍如何使用Miniconda在Linux、mac…...
数学建模学习(137):使用Python进行频数分析
在数据科学的工作中,频数分析是一种用于描述变量值出现次数的重要统计方法。SPSS等工具提供了便捷的频数分析功能,而在Python中,我们同样可以通过灵活的库来实现相同的分析。在本文中,我们将介绍如何使用Python来完成频数分析,并演示如何用Pandas、Matplotlib等库来分析和…...
[Unity] 【游戏开发】Unity开发基础1-创建Unity项目:从Unity Hub选择合适的渲染管
创建一个新的Unity项目通常是开发过程中的第一步,而Unity为此提供了强大的工具和灵活的选项。本文将详细介绍如何使用Unity Hub创建项目、选择合适的Unity版本、模板和渲染管线,并阐述每种选项的优缺点和适用场景。 1. Unity Hub:统一管理项目和版本 Unity Hub是Unity提供…...
大型语言模型综述 A Survey of Large Language Models
文章源自 2303.18223 (arxiv.org) 如有侵权,请通知下线 这是一篇关于大语言模型(LLMs)的综述论文,主要介绍了 LLMs 的发展历程、技术架构、训练方法、应用领域以及面临的挑战等方面,具体内容如下: 摘要…...
基于MATLAB的混沌序列图像加密程序
设计目的 图像信息生动形象,它已成为人类表达信息的重要手段之一,网络上的图像数据很多是要求发送方和接受都要进行加密通信,信息的安全与保密显得尤为重要,因此我想运用异或运算将数据进行隐藏,连续使用同一数据对图…...
容器安全检测和渗透测试工具
《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect Docker-bench-…...
视频修复技术和实时在线处理
什么是视频修复? 视频修复技术的目标是填补视频中的缺失部分,使视频内容连贯合理。这项技术在对象移除、视频修复和视频补全等领域有着广泛的应用。传统方法通常需要处理整个视频,导致处理速度慢,难以满足实时处理的需求。 技术发…...
MyBatis——#{} 和 ${} 的区别和动态 SQL
1. #{} 和 ${} 的区别 为了方便,接下来使用注解方式来演示: #{} 的 SQL 语句中的参数是用过 ? 来起到类似于占位符的作用,而 ${} 是直接进行参数替换,这种直接替换的即时 SQL 就可能会出现一个问题 当传入一个字符串时ÿ…...
学习日志014--用python实现顺序表
之前我们用c语言实现顺序表,今天就然我们用python来复习一遍 一、创建顺序表 python的类可以代替c中的结构体作为复合数据类型。 创建学生类,并用装饰器将方法属性化,便于之后的修改。属性装饰器,可以在保护私有属性࿰…...
Android ConstraintLayout 基础
Android ConstraintLayout 基础 屏障线 Barrier设置水平和垂直方向的约束关系长宽比链式结构组站位辅助线 参考地址 屏障线 Barrier 以下是使用 ConstraintLayout 在 Android 中实现简单屏障线(Barrier)使用的示例代码,主要步骤如下…...
Ubuntu22.04LTS 部署前后端分离项目
一、安装mysql8.0 1. 安装mysql8.0 # 更新安装包管理工具 sudo apt-get update # 安装 mysql数据库,过程中的选项选择 y sudo apt-get install mysql-server # 启动mysql命令如下 (停止mysql的命令为:sudo service mysql stop࿰…...
【网站推荐】the top trending open-source startups, every quarter
每季度最热门的开源初创公司 我们根据 GitHub 存储库自 2020 年以来的明星增长情况发布热门开源项目,并将其称为 Runa 开源初创公司 (ROSS) 指数。 una Capital actively invests in open-source startups (like Nginx and MariaDB) and considers an active deve…...
Java通过calcite实时读取kafka中的数据
引入maven依赖 <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-kafka</artifactId> <version>1.28.0</version> </dependency> 测试代码 import java.sql.Connection; import java.sql.DriverMan…...
el-table 数据去重后合并表尾合计行,金额千分位分割并保留两位小数,表尾合计行表格合并
问题背景 最近在做后台管理项目el-table 时候需要进行表尾合计,修改合计后文字的样式,合并单元格。 想实现的效果 合并表尾单元格前三列为1格;对某些指定的单元格进行表尾合计;合计后的文本样式加粗;涉及到金额需要千…...
Flutter:RotationTransition旋转动画
配置vsync,需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// 定义 AnimationController late AnimationController _controller;overridevoid initState() {super…...
《Python浪漫的烟花表白特效》
一、背景介绍 烟花象征着浪漫与激情,将它与表白结合在一起,会创造出别具一格的惊喜效果。使用Python的turtle模块,我们可以轻松绘制出动态的烟花特效,再配合文字表白,打造一段专属的浪漫体验。 接下来,让…...
Java面试题分享
1、hashmap的底层设计原理以及扩容规则,是否线程安全,如何线程安全。 jdk1.7以前采用数组加链表结构通过键哈希确定数组下标存键值对。jdk1.8及以后采用数组加链表加红黑树,链表超阈值且数组满足条件会转红黑树,哈希函数先取键 h…...
定时器的小应用
第一个项目 第一步,RCC开启时钟,这个基本上每个代码都是第一步,不用多想,在这里打开时钟后,定时器的基准时钟和整个外设的工作时钟就都会同时打开了 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);第二步&…...
【计算机网络】UDP协议
一、UDP协议格式 1.报头的含义 ① 16位源端口号:自己的端口号 ② 16位目的端口号:对方的端口号 ③ 16位UDP长度:整个数据报(UDP报头UDP有效载荷)的长度,最大64KB 一个UDP最多传64KB的数据,如果要传的数据 > 64K…...
vulhub之log4j
Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645) 漏洞简介 Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。 Apache Log4j 在应用程序中添加日志记录最…...
[Unity] 关于引入Google SDK以及使用的方法
在Unity中接入谷歌SDK(如Google Play Games SDK或Firebase SDK等)通常涉及几个关键步骤,包括下载SDK、导入Unity项目、配置项目设置、编写必要的代码以及测试集成。以下是一个基于Firebase SDK接入Unity的示例,同时涵盖了Google P…...
集群聊天服务器(13)redis环境安装和发布订阅命令
目录 环境安装订阅redis发布-订阅的客户端编程环境配置客户端编程 功能测试 环境安装 sudo apt-get install redis-server 先启动redis服务 /etc/init.d/redis-server start默认在6379端口上 redis是存键值对的,还可以存链表、数组等等复杂数据结构 而且数据是在…...
第R4周:LSTM-火灾温度预测(pytorch版)
>- **🍨 本文为[🔗365天深度学习训练营]中的学习记录博客** >- **🍖 原作者:[K同学啊]** 往期文章可查阅: 深度学习总结 任务说明:数据集中提供了火灾温度(Tem1)、一氧化碳浓度…...
基于SpringBoot和uniapp开发的医护上门系统上门护理小程序
项目分析 一、市场需求分析 人口老龄化趋势:随着全球及中国人口老龄化的加剧,老年人口数量显著增加,对医疗护理服务的需求也随之增长。老年人由于身体机能下降,更需要便捷、高效的医护服务,而医护上门服务恰好满足了这…...
js批量输入地址获取经纬度
使用js调用高德地图的接口批量输入地址获取经纬度。 以下的请求接口的key请换成你的key。 创建key:我的应用 | 高德控制台 ,服务平台选择《Web服务》。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-…...
Python自动化测试实践中pytest用到的功能dependency和parametrize
Python自动化测试中pytest用到的功能 1、pytest之@pytest.mark.dependency装饰器设置测试用例之间的依赖关系 1.1说明: 1、这是一个pytest第三方插件,主要解决用例之间的依赖关系。如果依赖的上下文测试用例失败后续的用例会被标识为跳过执行,相当于执行了 pytest.mark.s…...
json-bigint处理前端精度丢失问题
问题描述:前后端调试过程中,有时候会遇到精度丢失的问题,比如后端给过来的id超过16位,就会出现精度丢失的情况,前端拿到的id与后端给过来的不一致。 解决方案: 1、安装 npm i json-bigint 2、在axios中配置…...
神经网络10-Temporal Fusion Transformer (TFT)
Temporal Fusion Transformer (TFT) 是一种专为时序数据建模而设计的深度学习模型,它结合了Transformer架构和其他技术,旨在有效地处理和预测时序数据中的复杂模式。TFT 于 2020 年由 Google Research 提出,旨在解决传统模型在时序预测中的一…...
django基于django的民族服饰数据分析系统的设计与实现
摘 要 随着网络科技的发展,利用大数据分析对民族服饰进行管理已势在必行;该平台将帮助企业更好地理解服饰市场的趋势,优化服装款式,提高服装的质量。 本文讲述了基于python语言开发,后台数据库选择MySQL进行数据的存储…...
html数据类型
数据类型是字面含义,表示各种数据的类型。在任何语言中都存在数据类型,因为数据是各式各样。 1.数值类型 number let a 1; let num 1.1; // 整数小数都是数字值 // 数字肯定有个范围 正无穷大和负无穷大 // Infinity 正无穷大 // -Infinity 负…...
Springboot启动异常 错误: 找不到或无法加载主类 xxx.Application异常
Springboot启动异常 错误: 找不到或无法加载主类 xxx.Application异常 报错提示 Connected to the target VM, address: 127.0.0.1:57210, transport: socket 错误:找不到或无法加载主类 global.hh.manage.HHMicroCloudProviderApplication Disconnected from the target VM, …...
哋它亢SEO技术分析:如何提升网站在搜索引擎中的可见性
文章目录 哋它亢SEO技术分析:如何提升网站在搜索引擎中的可见性网站的基本情况SEO优化分析与建议1. 元数据优化2. 关键词优化3. URL结构4. 图像优化5. 移动端优化6. 网站速度7. 结构化数据(Schema Markup)8. 内链与外链9. 社交分享 哋它亢SEO…...