go-zero 实战(1)

news2024/11/26 1:33:11

环境准备

  • 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
在这里插入图片描述

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

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

相关文章

【东山派Vision K510开发板试用笔记】WiFi配网问题

目录 概述 WiFi配网的修改 悬而未决的问题 概述 最近试用了百问网提供的东山派Vision开发板,DongshanPI-Vision开发板是百问网针对AI应用开发设计出来的一个RSIC-V架构的AI开发板,主要用于学习使用嘉楠的K510芯片进行Linux项目开发和嵌入式AI应用开发…

手撕C语言题典——返回倒数第 k 个节点(面试题)

前言 依旧力扣,这道题之前有做过类似的题,今天给一个新的思路去做,应对面试时候遇到的奇奇怪怪的问题 面试题 02.02. 返回倒数第 k 个节点 - 力扣(LeetCode)https://leetcode.cn/problems/kth-node-from-end-of-list-…

英特尔LLM技术挑战记录

英特尔技术介绍: Flash Attention Flash Attention 是一种高效的注意力机制实现,旨在优化大规模 Transformer 模型中的自注意力计算。在深度学习和自然语言处理领域,自注意力是 Transformer 架构的核心组件,用于模型中不同输入元…

PMP报考条件怎么查询?如何判定自己是否符合条件?

PMP报考条件在PMI官网上就可以查询,PMP报考条件只需要符合项目管理培训经历和项目管理经验两个方面的要求即可,大家可以对照下方的规定判断自己是否符合PMP报名条件 PMP报考条件 以下是PMI(中国)官网对于PMP报名条件的规定&…

3D点云焊缝提取 平面交线 投影

文章目录 1. 效果2. 思路3. 源码 1. 效果 2. 思路 计算点云法向量;计算点云位姿Pose;翻转Pose中的Z轴方向,使其一致;通过Pose的Z轴对点云进行方向过滤;对点云聚类;根据目标点云的高度提取目标点云;提取两块…

Unity Dotween 定位点的制作

目录 前言 一、动画预览 二、动画拆分 三、素材准备 四、曲线 OutCirc详解 五、速度分类详解 六、代码 七、组件和设置 八、作者的话 前言 我答应我的粉丝接下来更新Dotween系列,但是我一直没想好,从哪里开始讲。 Dotween的安装我就跳过了&…

Java基础之 API 字符串

文章目录 API字符串String概述创建对象 java的内存模型java的常用方法(比较)练习 API 概念: APl(Application ProgrammingInterface): 应用程序编程接口 简单理解: API就是别人已经写好的东西,我们不需要自己编写,直接使用即可。 Java API: 指的就是J…

三层交换机基本配置,动态路由链接

<Huawei>system-view //进入系统视图[Huawei]undo info-center enable //关日志[Huawei]vlan batch 2 3 //创建vlan2与3[Huawei]display vlan //检查[Huawei]interface GigabitEthernet 0/0/2 //进2口[Huawei-GigabitEthernet0/0/2]port link-type access //配置…

【STM32嵌入式系统设计与开发---传感器拓展】——1_2_蓝牙主从模块_AT配置(HC-05)

一、主机蓝牙设置 # 1、重置模块 ATORGL # 2、设置名字&#xff0c;自己随便设置 ATNAMEMaster # 3、设置连接密码&#xff0c;要和从机一样&#xff0c;密码好像可以不加双引号 ATPSWD"1234" # 4、设置为主机 ROLE 1 为主机 ROLE 0为从机 ATROLE1 # 5、设置波特…

04 FreeRTOS 队列(queue)

1、队列的特性 队列可以理解为一个传送带&#xff0c;一个流水线。 队列可以包含若干个数据&#xff1a;队列中有若干项&#xff0c;这被称为"长度"(length) 每个数据大小固定 创建队列时就要指定长度、数据大小 数据的操作采用先进先出的方法(FIFO&#xff0c;First…

Python OCR 文字检测使用模型:读光-文字检测-DBNet行检测模型-中英-通用领域

介绍 什么是OCR&#xff1f; OCR是“Optical Character Recognition”的缩写&#xff0c;中文意为“光学字符识别”。它是一种技术&#xff0c;可以识别和转换打印在纸张或图像上的文字和字符为机器可处理的格式&#xff0c;如计算机文本文件。通过使用OCR技术&#xff0c;可…

【Python安全攻防】【网络安全】一、常见被动信息搜集手段

一、IP查询 原理&#xff1a;通过目标URL查询目标的IP地址。 所需库&#xff1a;socket Python代码示例&#xff1a; import socketip socket.gethostbyname(www.163.com) print(ip)上述代码中&#xff0c;使用gethostbyname函数。该函数位于Python内置的socket库中&#xf…

xss-labs之level9、level10

一、level9 1、测试分析 尝试了之前的payload&#xff0c;发现都不行&#xff0c;看源码发现多了个strpos函数&#xff0c; strpos() 是一个在 PHP 中用于查找子串首次出现位置的函数。它接受两个参数&#xff1a;要搜索的字符串&#xff08;主字符串&#xff09;和要查找的子…

5.28OpenMV入门

10分钟快速上手 OpenMV中文入门教程 使用的元件 先安装好&#xff0c;上述链接上手 IDE显示颜色阈值&#xff0c;同时也配有示例文件&#xff0c;如下图打开&#xff0c;helloworld 你好&#xff0c;世界&#xff01; OpenMV中文入门教程&#xff0c;在官方也有每一个的详细…

公司如何监控到电脑端微信聊天记录的?

在当今职场环境中&#xff0c;确保信息交流的安全性和合规性成为了企业管理中的重要议题。 特别是在使用像微信这样的即时通讯工具进行工作沟通时&#xff0c;合理监控员工的电脑端微信聊天记录成为了一些企业的管理需求。 但值得注意的是&#xff0c;此类监控必须建立在合法…

[数据集][目标检测]道路井盖下水道井盖开关闭和检测数据集VOC+YOLO格式407张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;407 标注数量(xml文件个数)&#xff1a;407 标注数量(txt文件个数)&#xff1a;407 标注类别…

[图解]企业应用架构模式2024新译本讲解02-表数据入口

1 00:00:00,420 --> 00:00:04,330 这个案例&#xff0c;我们就是用书上的案例了 2 00:00:06,080 --> 00:00:08,860 收入确认的一个案例 3 00:00:09,510 --> 00:00:11,100 书上讲了&#xff0c;收入确认 4 00:00:13,330 --> 00:00:15,270 就是说&#xff0c;你给…

JMH304-剑侠情缘2网络版+2017纹饰端+翅膀+单机+外网整理+各种副本

资源介绍&#xff1a; 藏剑-太虚-梁山-杀手堂种树地宫师门纹饰装备长流云阳套等等———– 做登录器联系站长 资源截图&#xff1a; 下载地址

ue5 后期处理体积lut如何加入

零、需要颜色查找表格&#xff0c;ps 一、ps中 把调节好的shift 一起拖入颜色查找表格 二、存储为png格式 另存为 保护好原来的颜色查找表格 三、导入ue5中 四、在后期处理体积中搜索misc 替换颜色查找表格 五、双击后期处理体积 纹理组替换颜色查找表格 2. 压缩设置lut改成…

FreeRtos进阶——队列的特殊用途

信号量与互斥量都一样&#xff0c;都是特殊的队列。但是只有互斥量实现了优先级继承机制。 信号量与互斥量与队列一样&#xff0c;在操作增加或者减少时&#xff0c;必须先关中断在进行操作&#xff01; 信号量创建揭秘 图中信号量的创建过程&#xff0c;在代码中的体现本质就是…