go-zero学习 第一章 基础

news2024/11/26 13:28:41

go-zero学习 第一章 基础

  • 重要提示
  • 1 相关命令
  • 2 参考文档
  • 3 架构图
  • 4 go-zero环境搭建
    • 4.1 注意事项
    • 4.2 go-zero 需要安装的组件
    • 4.3 自动安装
    • 4.4 手动安装
  • 5 单体服务
    • 5.1 简单入门
    • 5.2 api语法
    • 5.3 api 文件格式化
  • 6 微服务
    • 6.1 简单入门
    • 6.2 proto 语法
  • 7 目录结构介绍

重要提示

  1. 因官网重新改版,本文是基于官网最新版本的文档并整合旧文档重新进行全面总结、归纳。
  2. 本文主要对官网 快速开始 进行提炼总结,未涉及部分将在后续章节陆续补充完善。

1 相关命令

待补充。。。

2 参考文档

  1. 官方文档:go-zero

3 架构图

go-zero架构图

4 go-zero环境搭建

go-zero的是基于go的,所以首先需要安装配置go环境,go的安装配置可参考:Golang安装配置、GoLand安装配置 ,此处不再赘述。

4.1 注意事项

注意:如果是更新go-zero相关组件的版本,建议先备份原来的组件,防止最新版本的组件出现不兼容的问题。

4.2 go-zero 需要安装的组件

  • goctl
  • protoc
  • protoc-gen-go
  • protoc-gen-go-grpc

4.3 自动安装4.4 手动安装 均能安装go-zero的环境,如果按照4.3 自动安装某个组件失败,可按4.4 手动安装 来安装缺失的组件。

4.3 自动安装

  1. 先下载 goctl
go install github.com/zeromicro/go-zero/tools/goctl@latest
  1. 验证goctl的安装结果:goctl -v
D:\Software\Golang\GOPATH\bin>goctl -v
goctl version 1.5.3 windows/amd64
  1. goctl一键安装 protocprotoc-gen-goprotoc-gen-go-grpc
goctl env check --install --verbose --force

4.4 手动安装

  1. goctl 安装
go install github.com/zeromicro/go-zero/tools/goctl@latest
  1. Protobuf下载安装
    需要先下载protoc执行器
  • 到 https://github.com/protocolbuffers/protobuf/releases 分别下载Windows和Linux环境的执行器
  • 选择最新版本的protoc下载
    在这里插入图片描述
  • 将下载的文件解压,将解压后的bin目录加入到环境变量的path下。
  • 查看安装是否成功:protoc --version

Protobuf下Go、GRPC插件的安装

protoc-gen-go:Go专用的protoc的编译器插件,安装后会在GOPATH的bin目录下生成一个protoc-gen-go.exe
protoc-gen-go-grp:Go调用grpc的插件,安装后会在GOPATH的bin目录下生成一个protoc-gen-go-grpc.exe

go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1

至此使用Protobuf的准备工作就做完了

5 单体服务

5.1 简单入门

参考文档:api demo 代码生成

  1. 快速生成api服务,api服务就是网关服务,如果不与Service端【RPC端】交互,则可以独立成一个单独的服务。
goctl api new greet
  1. 目录结构:
.
│  go.mod
│  greet.api
│  greet.go
│
├─etc
│      greet-api.yaml
│
└─internal
    ├─config
    │      config.go
    │
    ├─handler
    │      greethandler.go
    │      routes.go
    │
    ├─logic
    │      greetlogic.go
    │
    ├─svc
    │      servicecontext.go
    │
    └─types
            types.go
  1. 启动服务:
cd greet
go mod init
go mod tidy
go run greet.go -f etc/greet-api.yaml
  1. 默认侦听在 8888 端口(可以在配置文件里修改端口),请求:
curl -i http://localhost:8888/from/you

返回如下:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Traceparent: 00-0c577bd0a5d96c7b9669d3bba60d6b09-5f4e42e62eb6a79e-00
Date: Mon, 19 Jun 2023 14:25:01 GMT
Content-Length: 4

null

5.2 api语法

参考:api语法

5.3 api 文件格式化

参考:api 文件格式化

在 api 文件编写完之后,我们的 api 内容参差不齐,就有如下内容:

# 格式化前
syntax = "v1"

type User {
    Id int64 `json:"id"`
    Name string `json:"name"`
    Age int `json:"age"`
    Description string `json:"description"`
}

type Student {
    Id int64 `json:"id"`
    No int64 `json:"no"`
    Name string `json:"name"`
    Age int `json:"age"`
    Description string `json:"description"`
}

service User {
    @handler ping
    get /ping
}

这样的 api 文件不够美观,不便于阅读,可以使用 goctl api format 命令对 api 文件进行格式化。

# 格式化后
syntax = "v1"

type User {
	Id          int64  `json:"id"`
	Name        string `json:"name"`
	Age         int    `json:"age"`
	Description string `json:"description"`
}

type Student {
	Id          int64  `json:"id"`
	No          int64  `json:"no"`
	Name        string `json:"name"`
	Age         int    `json:"age"`
	Description string `json:"description"`
}

service User {
	@handler ping
	get /ping
}

6 微服务

6.1 简单入门

参考文档:gRPC demo 代码生成

  1. 快速生成rpc服务。
goctl rpc new demo
  1. 目录结构:
.
│  demo.go
│  demo.proto
│  go.mod
│
├─demo
│      demo.pb.go
│      demo_grpc.pb.go
│
├─democlient
│      demo.go
│
├─etc
│      demo.yaml
│
└─internal
    ├─config
    │      config.go
    │
    ├─logic
    │      pinglogic.go
    │
    ├─server
    │      demoserver.go
    │
    └─svc
            servicecontext.go
  1. 编写简单的逻辑代码:
  • 找到 /demo/internal/logic/demologic.go 文件,编辑该文件,将 29 行替换为如下代码:
return &demo.Response{
    Pong:"pong",
}, nil
  • 修改配置文件 /demo/etc/demo.yaml,删除 3 至 7 行使用Etcd注册服务的内容,然后在追加内容 Mode: dev 至末尾:

goctl 生成最小化 gRPC 服务默认启动会向 ETCD 注册中心注册当前服务的信息,本次演示就不需要注册中心,所以删除了配置文件中的注册中心配置。

原始配置:

Name: demo.rpc
ListenOn: 0.0.0.0:8080
Etcd:
  Hosts:
  - 127.0.0.1:2379
  Key: demo.rpc

更改后的配置:

Name: demo.rpc
ListenOn: 0.0.0.0:8080
Mode: dev
  1. 启动服务:
# 进入服务目录
$ cd /demo
# 整理依赖文件
$ go mod tidy
# 启动 go 程序
$ go run demo.go

当控制台有如下输出 Starting rpc server at 0.0.0.0:8080...,说明服务已经启动成功,接着我们来访问一下该 gRPC 服务。

  1. 访问 gRPC 服务
    使用Postman访问测试,注意这是访问GRPC服务,所以需要创建grpc类型的请求。
    在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

当在 Postman 中看到如下输出内容时,代表你的服务已经启动,并能成功访问。

{
  "pong": "pong"
}

6.2 proto 语法

参考:proto 语法

7 目录结构介绍

  1. 目录结构
example
├── etc
│   └── example.yaml
├── main.go
└── internal
    ├── config
    │   └── config.go
    ├── handler
    │   ├── xxxhandler.go
    │   └── xxxhandler.go
    ├── logic
    │   └── xxxlogic.go
    ├── svc
    │   └── servicecontext.go
    └── types
        └── types.go
  1. 各文件介绍
  • example:单个服务目录,一般是某微服务名称。
  • etc:静态配置文件目录。
  • main.go:程序启动入口文件。
  • internal:单个服务内部文件,其可见范围仅限当前服务。
  • config:静态配置文件对应的结构体声明目录。
  • handler:handler 目录,可选,一般 http 服务会有这一层做路由管理,handler 为固定后缀。
  • logic:业务目录,所有业务编码文件都存放在这个目录下面,logic 为固定后缀。
  • svc:依赖注入目录,所有 logic 层需要用到的依赖都要在这里进行显式注入。
  • types:结构体存放目录。

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

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

相关文章

spring boot绮梦餐饮系统-计算机毕设 附源码88672

spring boot绮梦餐饮系统 目录 毕业设计 摘 要 Abstract 第1章 前 言 1.1 研究背景 1.2 研究现状 1.3 系统开发目标 第2章 系统开发环境 2.1 J2EE技术 2.2 Spring boot框架 2.3 MySQL数据库 2.4 B/S结构 2.5 JavaScript 运行模式 1.1是一种解释性脚本语言&…

Segment Anything Model(SAM)如何促进医学图像分割

文章目录 How Segment Anything Model (SAM) Boost Medical Image Segmentation?摘要segment anything modelHow SAM performs on Medical Image Segmentation?Pathology Image SegmentationLiver Tumor Segmentation from CECTPolyps Segmentation from Colonoscopy ImagesB…

Win10 hyper-v与vmware不兼容解决方案

Win10 hyper-v与vmware不兼容怎么办 一、异常1.1 异常描述 - V M w a r e W o r k s t a t i o n 与 H y p e r − V 不兼容 \color{red}{VMware Workstation 与 Hyper-V 不兼容} VMwareWorkstation与Hyper−V不兼容1.2 异常原因 二、解决办法2.1 关闭Hyper-V启动2.2 关闭内核…

【面试题】6月 vue核心面试题汇总

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 一、MVVM原理 在Vue2官方文档中没有找到Vue是MVVM的直接证据,但文档有提到&am…

判断数组中的每个元素是否为NaN numpy.isnan()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断数组中的每个元素是否为NaN numpy.isnan() [太阳]选择题 请问关于以下代码的最后输出正确的是? import numpy as np a np.array([1, np.nan, np.inf, float(nan)]) print(&…

PSD矢量处理:Graphics Mill 11.1.18 Crack

光栅和矢量处理 .NET SDK 图形铣床 11 图PSD矢量处理:Graphics Mill 11.1.18可供 .NET 和 ASP.NET 开发人员使用的最可靠的映像工具集。它允许用户轻松地向 .NET 应用添加复杂的光栅和矢量图像处理功能。 光栅图形 加载并保存 JPEG、PNG 和另外 8 种图像格式 调整大小&#xff…

SignalR服务主动发送消息给客户端

文章目录 背景尝试方案使用IHubContext上下文进行处理第一步 创建一个类用于处理上下文(WarningBroadcast)第二步:如何实例化这个对象呢下面是我实现的方式 第三步:使用扩展类 调用通知关于MessageBus的使用demo发布消息订阅消息 …

java 心理教育网站系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 心理教育网站系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

使用 Flask 的g对象和 MySQL 实现用户登录和注销功能

在Flask中,g对象是一个特殊类型的对象,被称为"上下文全局变量"。它在一次请求的生命周期内存储信息,并且可以在整个请求过程中访问和共享。 g对象对于存储用户登录信息非常有用。例如,当用户通过验证登录时&#xff0c…

编译程序的任务

编译程序是一种翻译程序,编译程序是将一种语言形式翻译成另一种语言形式。它将高级语言所写的源程序翻译成等价的机器语言或汇编语言的目标程序。 整个编译过程一般可以划分为 5 个阶段:词法分析、语法分析、语义分析及中间代码生成、中间代码优化和目标…

UOS系统VMware安装教程

官网链接 https://home.uniontech.com/ 从这里下镜像文件 内存最好4以上 选择ISO文件地址 选择自定义安装 手动分区 4个g给交换分区,剩下的全挂在根目录下

长视频自动化摘要笔记完整工作流;腾讯云发布AIGC全链路内容安全解决方案

🦉 AI新闻 🚀 腾讯云发布AIGC全链路内容安全解决方案,助力企业护航生成式人工智能健康发展 摘要:腾讯云公布MaaS能力全景图,提供AIGC全链路内容安全解决方案,覆盖从模型训练到内容生成再到事后运营全过程…

【工程应用八】终极的基于形状匹配方案解决(小模型+预生成模型+无效边缘去除+多尺度+各项异性+最小组件尺寸)

我估摸着这个应该是关于形状匹配或者模版匹配的最后一篇文章了,其实大概是2个多月前这些东西都已经弄完了,只是一直静不下来心整理文章,提醒一点,这篇文章后续可能会有多次修改(但不会重新发文章,而是在后台…

搭建GPU环境的TensorFlow并将单块GPU划分逻辑为分区的实践

1、搭建环境 1.1、查看GPU版本 在安装tensorflow的GPU版本之前可以先看下自己的显卡情况 命令:nvidia-smi 或者桌面右下角,NVIDIA图标,进入到NVIDIA的控制面板: 点击左下角的系统信息,组件中查看NVCUDA64.dll的版本…

英特尔淡化混合 CPU-GPU 引擎,将 NNP 合并到 GPU 中

早在 2022 年 2 月,当英特尔宣布其“Falcon Shores”项目以构建混合 CPU-GPU 计算引擎时,该项目允许在单个插槽中独立扩展 CPU 和 GPU 容量,看起来这家芯片制造商正准备与竞争对手 Nvidia 较量AMD 开始使用混合计算电机,Intel 称之…

基于Flask框架和Vue框架搭建一个Web端的深度学习检测系统(从模型训练,界面设计到服务器部署实现一个完整项目实战)

从Pytorch框架下YOLOv5的模型训练,到Flask框架的模型加载,再到Vue框架的界面设计到最后的服务器部署。 实验环境 1.Windows10系统 2.编辑器pycharm 3.GPU 1080Ti 4.anaconda虚拟环境安装相应的安装包 5.pytorch版本1.7.1 6.Python3.7.15 实验数据集 …

C++初阶—stackqueue

目录 1. stack的介绍和使用 1.1 stack的介绍 1.2 stack使用及OJ 1.2.1 最小栈 1.2.2 栈的弹出压入顺序 1.2.3 逆波兰表达式求值 1.2.4 用两个栈实现一个队列 2. queue的介绍和使用 2.1 queue的介绍 2.2 queue的使用及OJ 2.2.1 用队列实现栈 2.3 queue的模拟实现 3…

用户测试:确保产品质量的关键一环

用户测试:确保产品质量的关键一环 在当今竞争激烈的市场中,产品的质量是企业脱颖而出的关键因素之一。为了确保产品的质量,用户测试成为了开发过程中不可或缺的一环。用户测试是通过让真实用户使用产品并提供反馈意见来验证产品的功能、易用性…

【系统开发】尚硅谷 - 谷粒商城项目笔记(四):JSR303数据校验

文章目录 JSR303数据校验引入依赖和简介配置验证规则开启验证BindResult校验的统一异常处理JSR303分组校验自定义校验注解 JSR303数据校验 引入依赖和简介 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…

Python和c语言爬虫如何选择?

Python是最受欢迎的爬虫语言之一&#xff0c;因为它易于学习和使用&#xff0c;有大量的库和框架可供选择。JavaScript通常用于Web爬虫&#xff0c;因为它可以直接在浏览器中运行&#xff0c;可以轻松地从动态网站中提取数据。java是一种广泛使用的语言&#xff0c;它有很多强大…