go-zero 实战(1)

环境准备

  • go 版本

    go version go1.22.2 linux/amd64

  • goctl 安装
    goctl(官方建议读 go control)是 go-zero微服务框架下的代码生成工具。使用 goctl 可以显著提升开发效率,让开发人员将时间重点放在业务开发上,其功能有:

    • api 服务生成
    • rpc 服务生成
    • model 代码生成
    • 模板管理

    安装:

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

    这时候会在 gopath 的 bin 目录下生成 goctl 的执行进程

    goctl --version
    
  • protoc & protoc-gen-go 安装
    go-zero 提供了便捷的安装方式:

    goctl env check -i -f --verbose
    

HelloWorld

  • 生成项目

    mkdir helloworld
    cd helloworld
    goctl api new hello  # 如果没有配置环境变量,那么在上一步中,可以用goland 打开helloworld目录,并在terminal下执行如下命令
    cd hello
    go mod tidy  # 下载依赖
    
  • 使用goland 2022.1以上版本,打开 helloworld 目录
    在这里插入图片描述
    生成如下的代码结构示意图。

  • 修改生成的代码

    修改hellologic.go 中的代码,返回 “hello world”

    func (l *HelloLogic) Hello(req *types.Request) (resp *types.Response, err error) {
    	// todo: add your logic here and delete this line
    
    	return &types.Response{
    		Message: "hello world",
    	}, nil
    }
    
  • 启动应用,并访问 http://localhost:8888/from/me

微服务版本的 HelloWorld

场景

用户服务 user
订单服务 order

初始化工程

mkdir micorhelloworld
cd micorhelloworld
mkdir mall
cd mall
goctl api new order
goctl api new user

# 为了用  workspace 模式,执行下面语句
go work init
go work use order
go work use user

goland 代开 mall 目录

在这里插入图片描述

grpc 服务使用

由于 user 服务给order服务提供 rpc服务,所有要做以下工作:

  • 在 user 目录下创建 rpc 目录,并建立 user.proto文件

    syntax = "proto3";
    
    package user;
    
    option go_package = "./user";
    
    message IdRequest {
      string id = 1;
    }
    
    message UserResponse {
      string id = 1;
      string name = 2;
      string gender = 3;
    }
    
    service User {
      rpc getUser(IdRequest) returns(UserResponse);
    }
    
  • 删除 user 微服务下之前生成的代码
    在这里插入图片描述
    删除代码之后的目录结构。

  • 使用命令生成 rpc 代码

    cd user/rpc
    goctl rpc protoc user.proto --go_out=./types --go-grpc_out=./types --zrpc_out=.
    

    在这里插入图片描述

  • 将生成的代码,移动到 user 目录下,并且同步相关依赖
    在这里插入图片描述

提供 user 的业务逻辑

在这里插入图片描述

在order目录下生成接口代码

  • 修改 order.api 代码,添加如下代码
    在这里插入图片描述

使用命令,生成代码

cd mall/order
goctl api go -api order.api -dir ./  # 当前目录下生成代码

如果是添加接口后生成代码,可以在新的文件目录下生成代码,防止代码覆盖。

代码修改

为了使用 user 的 grpc服务,我们修改代码。

  1. rpc 代码生成时候,用到了 etcd 组件(可以看 user/etc/user.yaml 文件中)。因此,我们在 order/etc/order-.yaml 文件中,需要加入 etcd 配置:
    Name: order-api
    Host: 0.0.0.0
    Port: 8888
    UserRpc:
      Etcd:
        Hosts:
          - 127.0.0.1:2379
        Key: user.rpc
    
  2. 由于 user 是 grpc 的一个server,而 order 是 grpc的一个client,要想调用user的方法,需要先建立grpc的连接。
    1. 修改 order/internal/config/config.go 文件,增加 UserRpc 变量,与上一步增加的配置先呼应。为读取配置文件中的配置。
      type Config struct {
      	rest.RestConf
      	UserRpc zrpc.RpcClientConf # 为了去etcd中获取User Rpc 的地址
      }
      
    2. 建立连接,修改 order/internal/svc/servicecontext.go 文件
      在这里插入图片描述
    3. 修改业务逻辑 order/internal/logic/getorderlogic.go 文件
      在这里插入图片描述

安装并启动 etcd

wget get https://github.com/etcd-io/etcd/releases/download/v3.5.13/etcd-v3.5.13-linux-amd64.tar.gz

tar -xvf etcd-v3.5.13-linux-amd64.tar.gz
cd etcd-v3.5.13-linux-amd64.tar.gz
./etcd

在这里插入图片描述

goland 下启动微服务项目user, order,并访问order

http://localhost:8888/api/order/get/1
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

crossover玩游戏缺少文件怎么办 为什么游戏打开说缺失文件 crossover支持的游戏列表 CrossOver 提示 X 11 缺失怎么办?

CrossOver是一款类虚拟机软件,可以实现在Mac电脑上运行exe程序。不少Mac用户为了玩游戏,选择使用CrossOver这款软件玩Windows平台的游戏。 一、CrossOver支持的软件多吗 CrossOver是一款基于Wine的兼容工具,它可以让你在Mac或Linux上运行许多…

废品回收小程序:回收市场下的商业机遇

随着当下大众环保意识的提升,回收行业收到了大众的重视,行业快速发展。在互联网信息技术的支持下,“互联网废品回收”得到了发展,依靠各种技术搭建互联网回收平台,连接到居民与商家,让回收变得更加简单高效…

使用nvm管理node多版本(安装、卸载nvm,配置环境变量,更换npm淘宝镜像)淘宝的镜像域名更换

最近 使用nvm 管理 node 的时候发现nvm install node版本号 总是失败。 nvm install 20.12.2Error retrieving "http://npm.taobao.org/mirrors/node/latest/SHASUMS256.txt": HTTP Status 404查看原因,因为淘宝的镜像域名更换,由于 npm.taob…

【C++算法】BFS解决多源最短路问题相关经典算法题

1.01矩阵 既然本章是BFS解决多源最短路问题,也就是说有若干个起点,那我们就可以暴力一点,直接把多源最短路径问题转化成若干个单源最短路径问题,然后将每次的步数比较一下,取到最短的就是最短路径的结果,这…

10. C++异步IO处理库和使用libevent实现高性能服务器

C比较有名的异步IO处理库 libevent 这个主要使用的是epoll。libevthplibuvlibev 我们主要介绍libevent。 libevent重要函数 event_base_new 这个可以对应于epoll_create也就是创建一个实例。还可以初始化libevent所有管理相关的代码。比如说所能用到的队列,栈&a…

【C++】牛客——活动安排

✨题目链接: AB31 活动安排 ✨题目描述 给定𝑛个活动,每个活动安排的时间为[𝑎𝑖,𝑏𝑖)。求最多可以选择多少个活动,满足选择的活动时间两两之间没有重合。 ✨输入描述: 第一行…

cesium绘制区域编辑

npm 安装也是可以的 #默认安装最新的 yarn add cesium#卸载插件 yarn remove cesium#安装指定版本的 yarn add cesium1.96.0#安装指定版本到测试环境 yarn add cesium1.96.0 -D yarn install turf/turf <template><div id"cesiumContainer"></div&…

4.Redis之Redis的通用命令

0.Redis 实战操作 通过 redis-cli 客户端和 redis 服务器交互 涉及到很多的 redis 的命令 【redis 的命令非常非常多!!! 1.掌握常用命令(多操作多练习) 2.学会使用 redis 的文档-> 阅读文档, 是程序猿的基操!! redis 的命令非常非常多!!! 1.掌握常用命令(多操作多练习…

使用 Django 显示表中的数据

1、问题背景 当我们使用 Django 进行 Web 开发时&#xff0c;经常需要在 Web 页面上显示数据库中的数据。例如&#xff0c;我们可能需要在一个页面上显示所有用户的信息&#xff0c;或者在一个页面上显示所有文章的标题和作者。那么&#xff0c;如何使用 Django 来显示表中的数…

手机里装上好用的实用工具,生活办公更轻松

手机里装上好用的实用工具&#xff0c;生活办公才更轻松&#xff01;~ 1.一个木函 安卓手机里的“工具百宝箱”&#xff0c;应用集成了超过100种实用工具&#xff0c;包括单位和汇率换算、查询、OCR图片文字识别、自动文章摘要、图片表格识别和表情制作等等。它提供了全面的多…

防火墙技术基础篇:NAT转发之——Smart NAT(No-PAT和NAPT结合)

防火墙技术基础篇&#xff1a;NAT转发之——Smart NAT&#xff08;No-PAT和NAPT结合&#xff09; 传统的NAT技术在处理大规模网络和复杂应用场景时存在一定的局限性。为了解决这些问题&#xff0c;一种名为Smart NAT的新型网络技术应运而生。本文将详细介绍Smart NAT的概念、原…

信息标记形式 (XML, JSON, YAML)

文章目录 &#x1f5a5;️介绍&#x1f5a5;️三种形式&#x1f3f7;️XML (Extensible Markup Language)&#x1f516;规范&#x1f516;注释&#x1f516;举例&#x1f516;其他 &#x1f3f7;️JSON (JavaScript Object Notation)&#x1f516;规范&#x1f516;注释&#x…

数据恢复:手机数据恢复,盘点7个有效手机恢复方法

你知道吗&#xff0c;超过 70% 的智能手机用户都曾有过数据丢失的经历&#xff1f;如果你曾经丢失过手机中的重要文件&#xff0c;别担心&#xff0c;本文有解决办法。在本文中&#xff0c;我们将告诉你如何使用简单的步骤恢复手机中丢失的数据。无论你是不小心删除了文件还是手…

java.lang.NumberFormatException: For input string:

创建SpringBoot&#xff0c;Mybatis的项目时候&#xff0c;Service层调用Mapper层时候爆出了一个错误 发现报错是一个类型转换错误&#xff0c;经过排查后发现是因为mapper接收的实体类中没有写空参构造

Python: 使用pyotp实现OTP一次性密码验证

使用pyotp实现OTP一次性密码验证 OTP的基本原理 生成一个共享秘钥作为随机数的种子服务端通过种子计算出当前的密码客户端也通过相同的种子计算出当前的密码验证客户端生成的密码和服务端生成的密码是否匹配 服务端和客户端计算的方式一样 共享密钥 时间因子 算法 > 密…

吴恩达深度学习笔记:超 参 数 调 试 、 Batch 正 则 化 和 程 序 框 架(Hyperparameter tuning)3.8-3.9

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第三周&#xff1a; 超 参 数 调 试 、 Batch 正 则 化 和 程 序 框 架&#xff08;Hyperparameter …

线性插值的频域特性

1、抽取和插值的简单说明 抽取和插值是变采样过程中常用的两种手段&#xff0c;其中抽取的目的是降低数据的采样率&#xff0c;以降低对系统存储深度或计算量的要求。插值的目的是提高数据的采样率&#xff0c;以提高系统的计算精度。 M M M倍抽取通常是通过每隔 M M M…

全球首个AI代理驱动的元宇宙生态Wondra,让Web3再次伟大

前段时间&#xff0c;因为OpenAI的Sora发布、英伟达财报的发布&#xff0c;英伟达市值直逼2.5万亿美金&#xff0c;使得Crypto行业的AI赛道热度飙升&#xff0c;WLD&#xff0c;AGIX&#xff0c;FET等项目都有了不俗的表现。而这几天&#xff0c;因为大盘整体向好&#xff0c;再…

UVa1466/LA4849 String Phone

UVa1466/LA4849 String Phone 题目链接题意分析AC 代码 题目链接 本题是2010年icpc亚洲区域赛大田赛区的G题 题意 平面网格上有n&#xff08;n≤3000&#xff09;个单元格&#xff0c;各代表一个重要的建筑物。为了保证建筑物的安全&#xff0c;警察署给每个建筑物派了一名警察…

Android11 事件分发流程

在Android 11 输入系统之InputDispatcher和应用窗口建立联系一文中介绍到&#xff0c;当InputDispatcher写入数据后&#xff0c;客户端这边就会调用handleEvent方法接收数据 //frameworks\base\core\jni\android_view_InputEventReceiver.cpp int NativeInputEventReceiver::h…