[go-zero] goctl 生成api和rpc

文章目录

      • 1.goctl 概述
      • 2.go-zero 需要安装的组件
      • 3.生成 api
      • 4.生成 rpc

1.goctl 概述

goctl支持多种rpc,较为流行的是google开源的grpc,这里主要介绍goctl rpc protoc的代码生成与使用。protoc是grpc的命令,作用是将proto buffer文件转化为相应语言的代码。

goctl 是 go-zero 的内置脚手架,是提升开发效率的一大利器,可以一键生成代码、文档、部署 k8s yaml、dockerfile 等。

goctl安装:

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

在这里插入图片描述

go-zero框架设计:

在这里插入图片描述

客户端 -> Api -> Service -> 缓存 -> Db

  • 客户端: IOS, Android, web, PC
  • Api: Http, 鉴权, 加密, 日志, 异常捕获, 监控, 数据统计, 并发, 链路跟踪, 超时, 熔断, 降级
  • Service: gRPC, 缓存, 日志, 异常捕获, 监控, 数据统计, 并发, 链路跟踪, 超时, 熔断, 降级

2.go-zero 需要安装的组件

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

Protobuf下载安装:


https://github.com/protocolbuffers/protobuf/releases

在这里插入图片描述

将下载的文件解压,将解压后的bin目录加入到环境变量的path下。

在这里插入图片描述

在这里插入图片描述

下载 goctl, proto-gen-go, proto-gen-go-grpc:

go install github.com/zeromicro/go-zero/tools/goctl@latestgoctl env check -i -f --verbosego install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1

3.生成 api

goctl api new api

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

logic/apilogic.go

package logicimport ("context""go-zero-demo01/user/api/internal/svc""go-zero-demo01/user/api/internal/types""github.com/zeromicro/go-zero/core/logx"
)type ApiLogic struct {logx.Loggerctx    context.ContextsvcCtx *svc.ServiceContext
}func NewApiLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ApiLogic {return &ApiLogic{Logger: logx.WithContext(ctx),ctx:    ctx,svcCtx: svcCtx,}
}func (l *ApiLogic) Api(req *types.Request) (resp *types.Response, err error) {// todo: add your logic here and delete this linereturn &types.Response{Message: "api success",}, nil
}
cd api
go mod tidy
go run api.go

在这里插入图片描述

在这里插入图片描述

4.生成 rpc

goctl rpc new user

或者直接提供goland中的goctl的插件生成rpc的结构。

在这里插入图片描述

user.proto

syntax = "proto3";package user;option go_package = './user';message UserReq {string id = 1;
}message UserResp {string id = 1;string name = 2;
}service User {rpc getUser(UserReq) returns (UserResp);
}

在这里插入图片描述

在这里插入图片描述

etcd:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

go run user.go

在这里插入图片描述

利用apifox打开grpc的接口:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

探讨命令模式及其应用

目录 命令模式命令模式结构命令模式适用场景命令模式优缺点练手题目题目描述输入描述输出描述题解 命令模式 命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其…

《亚马逊搬运亚马逊产品》配合跟卖采集爬取跟卖店铺高质量

亚马逊高质量产品如何搬运?亚马逊采集亚马逊。 哈喽大家好,大家讲一下做亚马逊是发货、铺货这块的功能。目前这款软件做跟卖大家都知道,同时也支持做铺货。铺货可以采集国内的1688、淘宝、京东都可以采,采完之后也可以采速卖通&a…

周周星分享7.3—基于气象大数据的自动站实况联合预测

赛题 2024中国高校计算机大赛 — 大数据挑战赛 经验分享 大家好,我是扫地僧团队的队长,以前参加这样打榜的比赛比较少,了解的打榜技巧不是太多,所以想从科研的角度给大家一点分享。 这次比赛主要从以下五个步骤进行&#xff1a…

Linux Doxygen快速生成文档

此前写过一篇编写Doxygen格式的注释以用于生成文档,点击以查阅, Doxygen常用语法与字段记录,但是当时用的windows桌面版的doxygen,最近使用ubuntu编写代码想直接使用doxygen生成,故写下此博客 Doxygen Doxygen是一个用于生成软件文档的工具,它可以从代码中提取注释…

Android高级面试_6_性能优化

Android 高级面试-7:网络相关的三方库和网络协议等 1、网络框架 问题:HttpUrlConnection, HttpClient, Volley 和 OkHttp 的区别? HttpUrlConnection 的基本使用方式如下: URL url new URL("http://www.baidu.com")…

SwanLinkOS首批实现与HarmonyOS NEXT互联互通,软通动力子公司鸿湖万联助力鸿蒙生态统一互联

在刚刚落下帷幕的华为开发者大会2024上,伴随全场景智能操作系统HarmonyOS Next的盛大发布,作为基于OpenHarmony的同根同源系统生态,软通动力子公司鸿湖万联全域智能操作系统SwanLinkOS首批实现与HarmonyOS NEXT互联互通,率先攻克基…

大模型与机器人精彩碰撞-7月5日晚上八点不见不散!

在瞬息万变的科技时代,新兴人工智能和机器人技术的结合正在引领新一轮的创新浪潮。你是否想成为未来科技的领航者?你是否想了解最前沿的AI与机器人技术?行麦科技重磅推出的“AIGC时代的生存法则”AI系列课,将为你揭开大模型与机器…

创建kset

1、kset介绍 2、相关结构体和api介绍 2.1 struct kset 2.2 kset_create_and_add kset_create_and_addkset_createkset_registerkobject_add_internalkobject_add_internal2.3 kset_unregister kset_unregisterkobject_delkobject_put3、实验操作 #include<linux/module.…

【leetcode64-69二分查找、70-74栈、75-77堆】

二分查找[64-69] 时间复杂度O(log n)&#xff0c;要想到二分排序 35.搜索插入位置 class Solution:def searchInsert(self, nums: List[int], target: int) -> int:left 0right len(nums)-1while left < right: #左闭右闭mid (leftright)//2if nums[mid] < target…

【算法训练记录——Day39】

Day39——动态规划Ⅱ 1.leetcode_62不同路径2.leetcode_63不同路径Ⅱ3.leetcode_343整数拆分4.leetcode_96不同的二叉树搜索 1.leetcode_62不同路径 思路&#xff1a;经典的动态规划问题&#xff1a; dp[i][j]表示到达&#xff08;i&#xff0c;j&#xff09;位置时的不同路径…

运维锅总浅析云原生DevOps工具

本文从Tekton与Kubevela、Jenkins、GitLab CI的区别与联系对常见的云原生DevOps工具进行对比分析&#xff0c;最后给出DevOps工具选型思路。希望对您有所帮助&#xff01; 一、DevOps简介 DevOps是一种结合了软件开发&#xff08;Development&#xff09;和IT运维&#xff08…

登录功能和校验

基础版 controller package com.web.management.controller;import com.web.management.pojo.Emp; import com.web.management.pojo.Result; import com.web.management.service.EmpService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.anno…

Ignis 应用: 社交 + 游戏 + 工业4.0,Ignis 构建Web3生态圈

引言 在数字经济快速发展的今天&#xff0c;Web3技术为我们带来了前所未有的变革。作为Ardor平台的主要子链&#xff0c;Ignis公链在推动Web3生态系统建设中扮演了重要角色。本文将通过介绍Vessel Chain、Mythical Beings和Bridge Champ等应用&#xff0c;探讨Ignis公链如何通…

html+css+js文章模板

图片 源代码在图片后面&#xff0c;点赞加关注&#xff0c;谢谢&#x1f604; 源代码 <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width,…

停车场车牌识别计费系统,用Python如何实现?

关注星标&#xff0c;每天学习Python新技能 前段时间练习过的一个小项目&#xff0c;今天再看看&#xff0c;记录一下~ 项目结构 说明&#xff1a; datefile文件夹&#xff1a;保存车辆信息表的xlsx文件 file文件夹&#xff1a;保存图片文件夹。ic_launcher.jpg是窗体的右上角…

周下载量20万的npm包---store

https://www.npmjs.com/package/store <script setup> import { onMounted } from vue import store from storeonMounted(() > {store.set(user, { name: xutongbao })let user store.get(user)console.log(user) //对象console.log(localStorage.getItem(user)) //…

CesiumJS【Basic】- #056 绘制纹理填充多边形(Entity方式)-使用shader

文章目录 绘制纹理填充多边形(Entity方式)-使用shader1 目标2 代码2.1 main.ts绘制纹理填充多边形(Entity方式)-使用shader 1 目标 使用Entity方式绘制绘制纹理填充多边形 - 使用shader 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium…

搭建个人博客及错误记录

搭建个人博客及错误记录 文章目录 搭建个人博客及错误记录需要用到的网址2.推荐两个参考教学视频3.发布一篇博客个人主题配置的提醒localhost拒绝连接问题解决办法ssh -T gitgithub.com失败问题解决Deployer not found:git解决 可以根据目录解决遇到的相同问题 需要用到的网址 …

朋友圈运营必备!一键转发和自动转发轻松搞定!

你还在手动发布多个微信号的朋友圈吗&#xff1f; 现在&#xff0c;就教你一招&#xff0c;让你轻松实现一键转发和自动转发朋友圈&#xff01; 首先&#xff0c;我们需要在个微管理系统上登录自己的微信号&#xff0c;以便进行统一管理。这个系统可以多个微信号同时登录&…

项目经验-不同行业、不同风格的网站设计

网站UI设计的首要考虑点是布局与导航。合理的布局能够确保信息清晰呈现&#xff0c;使用户能够快速定位所需内容。同时&#xff0c;简洁明了的导航设计能够引导用户流畅浏览&#xff0c;减少迷失感。通过精心设计的布局和导航&#xff0c;可以提升用户体验&#xff0c;增强用户…