0、转载

go-zero docker-compose 搭建课件服务(三):编写courseware api服务

0.1源码地址

https://github.com/liuyuede123/go-zero-courseware

1、生成api相关文件

  1. # 到之前创建的courseware/api目录下
  2. goctl api go -api courseware.api -dir . -style gozero

2、courseware/api/etc/user.yaml下增加rpc配置

  1. Name: courseware
  2. Host: 0.0.0.0
  3. Port: 8400
  4. CoursewareRpc:
  5. Etcd:
  6. Hosts:
  7. - etcd:2379
  8. Key: courseware.rpc

3、courseware/api/internal/config/config.go下增加CoursewareRpc

  1. package config
  2. import (
  3. "github.com/zeromicro/go-zero/rest"
  4. "github.com/zeromicro/go-zero/zrpc"
  5. )
  6. type Config struct {
  7. rest.RestConf
  8. CoursewareRpc zrpc.RpcClientConf
  9. }

3、courseware/api/internal/svc/servicecontext.go下增加CoursewareRpc配置

  1. package svc
  2. import (
  3. "github.com/zeromicro/go-zero/zrpc"
  4. "go-zero-courseware/courseware/api/internal/config"
  5. "go-zero-courseware/courseware/rpc/coursewareclient"
  6. )
  7. type ServiceContext struct {
  8. Config config.Config
  9. CoursewareRpc coursewareclient.Courseware
  10. }
  11. func NewServiceContext(c config.Config) *ServiceContext {
  12. return &ServiceContext{
  13. Config: c,
  14. CoursewareRpc: coursewareclient.NewCourseware(zrpc.MustNewClient(c.CoursewareRpc)),
  15. }
  16. }

4、补充增删改查相关接口逻辑

courseware/api/internal/logic/coursewareaddlogic.go

  1. package logic
  2. import (
  3. "context"
  4. "go-zero-courseware/courseware/rpc/coursewareclient"
  5. "go-zero-courseware/courseware/api/internal/svc"
  6. "go-zero-courseware/courseware/api/internal/types"
  7. "github.com/zeromicro/go-zero/core/logx"
  8. )
  9. type CoursewareAddLogic struct {
  10. logx.Logger
  11. ctx context.Context
  12. svcCtx *svc.ServiceContext
  13. }
  14. func NewCoursewareAddLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CoursewareAddLogic {
  15. return &CoursewareAddLogic{
  16. Logger: logx.WithContext(ctx),
  17. ctx: ctx,
  18. svcCtx: svcCtx,
  19. }
  20. }
  21. func (l *CoursewareAddLogic) CoursewareAdd(req *types.AddRequest) (resp *types.AddResponse, err error) {
  22. _, err = l.svcCtx.CoursewareRpc.Add(l.ctx, &coursewareclient.AddRequest{
  23. Code: req.Code,
  24. Name: req.Name,
  25. Type: req.Type,
  26. })
  27. if err != nil {
  28. return nil, err
  29. }
  30. return &types.AddResponse{}, nil
  31. }

courseware/api/internal/logic/coursewaredeletelogic.go

  1. package logic
  2. import (
  3. "context"
  4. "go-zero-courseware/courseware/rpc/coursewareclient"
  5. "go-zero-courseware/courseware/api/internal/svc"
  6. "go-zero-courseware/courseware/api/internal/types"
  7. "github.com/zeromicro/go-zero/core/logx"
  8. )
  9. type CoursewareDeleteLogic struct {
  10. logx.Logger
  11. ctx context.Context
  12. svcCtx *svc.ServiceContext
  13. }
  14. func NewCoursewareDeleteLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CoursewareDeleteLogic {
  15. return &CoursewareDeleteLogic{
  16. Logger: logx.WithContext(ctx),
  17. ctx: ctx,
  18. svcCtx: svcCtx,
  19. }
  20. }
  21. func (l *CoursewareDeleteLogic) CoursewareDelete(req *types.DeleteRequest) (resp *types.DeleteResponse, err error) {
  22. _, err = l.svcCtx.CoursewareRpc.Delete(l.ctx, &coursewareclient.DeleteRequest{
  23. Id: req.Id,
  24. })
  25. if err != nil {
  26. return nil, err
  27. }
  28. return &types.DeleteResponse{}, nil
  29. }

courseware/api/internal/logic/coursewaregetlogic.go

  1. package logic
  2. import (
  3. "context"
  4. "go-zero-courseware/courseware/rpc/coursewareclient"
  5. "go-zero-courseware/courseware/api/internal/svc"
  6. "go-zero-courseware/courseware/api/internal/types"
  7. "github.com/zeromicro/go-zero/core/logx"
  8. )
  9. type CoursewareGetLogic struct {
  10. logx.Logger
  11. ctx context.Context
  12. svcCtx *svc.ServiceContext
  13. }
  14. func NewCoursewareGetLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CoursewareGetLogic {
  15. return &CoursewareGetLogic{
  16. Logger: logx.WithContext(ctx),
  17. ctx: ctx,
  18. svcCtx: svcCtx,
  19. }
  20. }
  21. func (l *CoursewareGetLogic) CoursewareGet(req *types.GetRequest) (resp *types.GetResponse, err error) {
  22. cw, err := l.svcCtx.CoursewareRpc.Get(l.ctx, &coursewareclient.GetRequest{
  23. Id: req.Id,
  24. })
  25. if err != nil {
  26. return nil, err
  27. }
  28. return &types.GetResponse{
  29. Id: cw.Id,
  30. Code: cw.Code,
  31. Name: cw.Name,
  32. Type: cw.Type,
  33. }, nil
  34. }

courseware/api/internal/logic/coursewareupdatelogic.go

  1. package logic
  2. import (
  3. "context"
  4. "go-zero-courseware/courseware/rpc/coursewareclient"
  5. "go-zero-courseware/courseware/api/internal/svc"
  6. "go-zero-courseware/courseware/api/internal/types"
  7. "github.com/zeromicro/go-zero/core/logx"
  8. )
  9. type CoursewareUpdateLogic struct {
  10. logx.Logger
  11. ctx context.Context
  12. svcCtx *svc.ServiceContext
  13. }
  14. func NewCoursewareUpdateLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CoursewareUpdateLogic {
  15. return &CoursewareUpdateLogic{
  16. Logger: logx.WithContext(ctx),
  17. ctx: ctx,
  18. svcCtx: svcCtx,
  19. }
  20. }
  21. func (l *CoursewareUpdateLogic) CoursewareUpdate(req *types.UpdateRequest) (resp *types.UpdateResponse, err error) {
  22. _, err = l.svcCtx.CoursewareRpc.Update(l.ctx, &coursewareclient.UpdateRequest{
  23. Id: req.Id,
  24. Code: req.Code,
  25. Name: req.Name,
  26. Type: req.Type,
  27. })
  28. if err != nil {
  29. return nil, err
  30. }
  31. return &types.UpdateResponse{}, nil
  32. }

go-zero docker-compose 搭建课件服务(三):编写courseware api服务的更多相关文章

  1. Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh

    本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺 ...

  2. 使用Docker Compose搭建Service Mesh

    使用Docker Compose搭建Service Mesh 本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于 ...

  3. Docker Compose 搭建 Redis Cluster 集群环境

    在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...

  4. 利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)

    0.前言 相信点进来看这篇文章的同学们已经对 Docker Dompose 有一定的了解了,下面,我们拿最简单的例子来介绍如何使用 Docker Compose 来管理项目. 本文例子: 一个应用服务 ...

  5. go-zero docker-compose 搭建课件服务(二):编写courseware rpc服务

    0.转载 go-zero docker-compose 搭建课件服务(二):编写courseware rpc服务 0.1源码地址 https://github.com/liuyuede123/go-z ...

  6. 【重学Node.js 第1&2篇】本地搭建Node环境并起RESTful Api服务

    本地搭建Node环境并起RESTful Api服务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https: ...

  7. Docker Compose搭建Redis一主二从三哨兵高可用集群

    一.Docker Compose介绍 https://docs.docker.com/compose/ Docker官方的网站是这样介绍Docker Compose的: Compose是用于定义和运行 ...

  8. docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot【图文完整版】

    一.前言 redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群. redis有两种高可用的方案: High availability with Re ...

  9. Docker Compose搭建ELK

    Elasticsearch默认使用mmapfs目录来存储索引.操作系统默认的mmap计数太低可能导致内存不足,我们可以使用下面这条命令来增加内存: sysctl -w vm.max_map_count ...

随机推荐

  1. 【ARK UI】HarmonyOS ETS 资源管理基本使用

    ​代码实现 api讲解 getStringArray getStringArray(resId: number, callback: AsyncCallback<Array>): void ...

  2. SwiftUI实战教程-土豆List

    代码库 教程中的项目代码都保存在这里:https://gitee.com/KINGWDY_admin/swiftui01 前言 在这一章节中,我们会使用List控件做一个土豆List,实现了列表填充. ...

  3. HEXO-admin安装和使用(汉化版)

    hi,大家好,我是KINGWDY,众所周知我用的是hexo,写博文首先要在终端输入hexo n xxxxx,然后打开MWeb PRO开始写md,但是,这很麻烦,就在我一筹莫展之际,我看到了这篇博文-- ...

  4. KubeEdge:下一代云原生边缘设备管理标准DMI的设计与实现

    摘要:KubeEdge设备管理架构的设计实现,有效帮助用户处理设备数字孪生进程中遇到的场景. 本文分享自华为云社区<KubeEdge:下一代云原生边缘设备管理标准DMI的设计与实现>. 随 ...

  5. k8s 网络持久化存储之StorageClass(如何一步步实现动态持久化存储)

    StorageClass的作用: 创建pv时,先要创建各种固定大小的PV,而这些PV都是手动创建的,当业务量上来时,需要创建很多的PV,过程非常麻烦. 而且开发人员在申请PVC资源时,还不一定有匹配条 ...

  6. KingbaseES V8R6 vacuum index_cleanup 选项

    描述: 由于索引页的复用不像HEAP TABLE的PAGE复用机制那么简单只要有空闲空间就可以插入.索引页的空闲空间被复用,必须是PAGE的边界内的值才允许插入. 因此索引一旦膨胀,很难收缩,常用的方 ...

  7. Ladon简单使用例子

    Socks5代理扫描 例子:扫描目标10.1.2段是否存在MS17010漏洞(必须加noping) Ladon noping 10.1.2.8/24 MS17010 详见:http://k8gege. ...

  8. Linux系统编程001--系统IO

    1. 文件系统:用来存储.组织.管理文件的一套方式.协议 2. 文件 文件的属性:i-node唯一表示一个文件的存在与否 文件的内容 3. Linux系统如何实现文件的操作? 点击查看代码 硬件层: ...

  9. winform, 实现窗口程序像QQ一样靠近桌面边缘自动隐藏窗口

    实现原理: 步骤如下: 1.判断窗体程序是否靠近桌面边缘: 2.获取桌面屏幕大小与窗体程序大小: 3.把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序: 4.判断鼠标是否在窗体程序上,在 ...

  10. 微信小程序开发总结-怀庄酒业投票活动

    使用微信小程序投票活动云开发 怀庄酒业活动 使用云开发.开始准备使用django开发自己的后台,但是发现功能比较简单,使用云开发更省事 项目结构: cloudfunctions目录下是三个云函数 ba ...