go-zero docker-compose 搭建课件服务(三):编写courseware api服务
0、转载
go-zero docker-compose 搭建课件服务(三):编写courseware api服务
0.1源码地址
https://github.com/liuyuede123/go-zero-courseware
1、生成api相关文件
# 到之前创建的courseware/api目录下
goctl api go -api courseware.api -dir . -style gozero
2、courseware/api/etc/user.yaml下增加rpc配置
Name: courseware
Host: 0.0.0.0
Port: 8400
CoursewareRpc:
Etcd:
Hosts:
- etcd:2379
Key: courseware.rpc
3、courseware/api/internal/config/config.go下增加CoursewareRpc
package config
import (
"github.com/zeromicro/go-zero/rest"
"github.com/zeromicro/go-zero/zrpc"
)
type Config struct {
rest.RestConf
CoursewareRpc zrpc.RpcClientConf
}
3、courseware/api/internal/svc/servicecontext.go下增加CoursewareRpc配置
package svc
import (
"github.com/zeromicro/go-zero/zrpc"
"go-zero-courseware/courseware/api/internal/config"
"go-zero-courseware/courseware/rpc/coursewareclient"
)
type ServiceContext struct {
Config config.Config
CoursewareRpc coursewareclient.Courseware
}
func NewServiceContext(c config.Config) *ServiceContext {
return &ServiceContext{
Config: c,
CoursewareRpc: coursewareclient.NewCourseware(zrpc.MustNewClient(c.CoursewareRpc)),
}
}
4、补充增删改查相关接口逻辑
courseware/api/internal/logic/coursewareaddlogic.go
package logic
import (
"context"
"go-zero-courseware/courseware/rpc/coursewareclient"
"go-zero-courseware/courseware/api/internal/svc"
"go-zero-courseware/courseware/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type CoursewareAddLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewCoursewareAddLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CoursewareAddLogic {
return &CoursewareAddLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *CoursewareAddLogic) CoursewareAdd(req *types.AddRequest) (resp *types.AddResponse, err error) {
_, err = l.svcCtx.CoursewareRpc.Add(l.ctx, &coursewareclient.AddRequest{
Code: req.Code,
Name: req.Name,
Type: req.Type,
})
if err != nil {
return nil, err
}
return &types.AddResponse{}, nil
}
courseware/api/internal/logic/coursewaredeletelogic.go
package logic
import (
"context"
"go-zero-courseware/courseware/rpc/coursewareclient"
"go-zero-courseware/courseware/api/internal/svc"
"go-zero-courseware/courseware/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type CoursewareDeleteLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewCoursewareDeleteLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CoursewareDeleteLogic {
return &CoursewareDeleteLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *CoursewareDeleteLogic) CoursewareDelete(req *types.DeleteRequest) (resp *types.DeleteResponse, err error) {
_, err = l.svcCtx.CoursewareRpc.Delete(l.ctx, &coursewareclient.DeleteRequest{
Id: req.Id,
})
if err != nil {
return nil, err
}
return &types.DeleteResponse{}, nil
}
courseware/api/internal/logic/coursewaregetlogic.go
package logic
import (
"context"
"go-zero-courseware/courseware/rpc/coursewareclient"
"go-zero-courseware/courseware/api/internal/svc"
"go-zero-courseware/courseware/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type CoursewareGetLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewCoursewareGetLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CoursewareGetLogic {
return &CoursewareGetLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *CoursewareGetLogic) CoursewareGet(req *types.GetRequest) (resp *types.GetResponse, err error) {
cw, err := l.svcCtx.CoursewareRpc.Get(l.ctx, &coursewareclient.GetRequest{
Id: req.Id,
})
if err != nil {
return nil, err
}
return &types.GetResponse{
Id: cw.Id,
Code: cw.Code,
Name: cw.Name,
Type: cw.Type,
}, nil
}
courseware/api/internal/logic/coursewareupdatelogic.go
package logic
import (
"context"
"go-zero-courseware/courseware/rpc/coursewareclient"
"go-zero-courseware/courseware/api/internal/svc"
"go-zero-courseware/courseware/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type CoursewareUpdateLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewCoursewareUpdateLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CoursewareUpdateLogic {
return &CoursewareUpdateLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *CoursewareUpdateLogic) CoursewareUpdate(req *types.UpdateRequest) (resp *types.UpdateResponse, err error) {
_, err = l.svcCtx.CoursewareRpc.Update(l.ctx, &coursewareclient.UpdateRequest{
Id: req.Id,
Code: req.Code,
Name: req.Name,
Type: req.Type,
})
if err != nil {
return nil, err
}
return &types.UpdateResponse{}, nil
}
go-zero docker-compose 搭建课件服务(三):编写courseware api服务的更多相关文章
- Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh
本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺 ...
- 使用Docker Compose搭建Service Mesh
使用Docker Compose搭建Service Mesh 本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于 ...
- Docker Compose 搭建 Redis Cluster 集群环境
在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...
- 利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)
0.前言 相信点进来看这篇文章的同学们已经对 Docker Dompose 有一定的了解了,下面,我们拿最简单的例子来介绍如何使用 Docker Compose 来管理项目. 本文例子: 一个应用服务 ...
- go-zero docker-compose 搭建课件服务(二):编写courseware rpc服务
0.转载 go-zero docker-compose 搭建课件服务(二):编写courseware rpc服务 0.1源码地址 https://github.com/liuyuede123/go-z ...
- 【重学Node.js 第1&2篇】本地搭建Node环境并起RESTful Api服务
本地搭建Node环境并起RESTful Api服务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https: ...
- Docker Compose搭建Redis一主二从三哨兵高可用集群
一.Docker Compose介绍 https://docs.docker.com/compose/ Docker官方的网站是这样介绍Docker Compose的: Compose是用于定义和运行 ...
- docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot【图文完整版】
一.前言 redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群. redis有两种高可用的方案: High availability with Re ...
- Docker Compose搭建ELK
Elasticsearch默认使用mmapfs目录来存储索引.操作系统默认的mmap计数太低可能导致内存不足,我们可以使用下面这条命令来增加内存: sysctl -w vm.max_map_count ...
随机推荐
- 【ARK UI】HarmonyOS ETS 资源管理基本使用
代码实现 api讲解 getStringArray getStringArray(resId: number, callback: AsyncCallback<Array>): void ...
- SwiftUI实战教程-土豆List
代码库 教程中的项目代码都保存在这里:https://gitee.com/KINGWDY_admin/swiftui01 前言 在这一章节中,我们会使用List控件做一个土豆List,实现了列表填充. ...
- HEXO-admin安装和使用(汉化版)
hi,大家好,我是KINGWDY,众所周知我用的是hexo,写博文首先要在终端输入hexo n xxxxx,然后打开MWeb PRO开始写md,但是,这很麻烦,就在我一筹莫展之际,我看到了这篇博文-- ...
- KubeEdge:下一代云原生边缘设备管理标准DMI的设计与实现
摘要:KubeEdge设备管理架构的设计实现,有效帮助用户处理设备数字孪生进程中遇到的场景. 本文分享自华为云社区<KubeEdge:下一代云原生边缘设备管理标准DMI的设计与实现>. 随 ...
- k8s 网络持久化存储之StorageClass(如何一步步实现动态持久化存储)
StorageClass的作用: 创建pv时,先要创建各种固定大小的PV,而这些PV都是手动创建的,当业务量上来时,需要创建很多的PV,过程非常麻烦. 而且开发人员在申请PVC资源时,还不一定有匹配条 ...
- KingbaseES V8R6 vacuum index_cleanup 选项
描述: 由于索引页的复用不像HEAP TABLE的PAGE复用机制那么简单只要有空闲空间就可以插入.索引页的空闲空间被复用,必须是PAGE的边界内的值才允许插入. 因此索引一旦膨胀,很难收缩,常用的方 ...
- Ladon简单使用例子
Socks5代理扫描 例子:扫描目标10.1.2段是否存在MS17010漏洞(必须加noping) Ladon noping 10.1.2.8/24 MS17010 详见:http://k8gege. ...
- Linux系统编程001--系统IO
1. 文件系统:用来存储.组织.管理文件的一套方式.协议 2. 文件 文件的属性:i-node唯一表示一个文件的存在与否 文件的内容 3. Linux系统如何实现文件的操作? 点击查看代码 硬件层: ...
- winform, 实现窗口程序像QQ一样靠近桌面边缘自动隐藏窗口
实现原理: 步骤如下: 1.判断窗体程序是否靠近桌面边缘: 2.获取桌面屏幕大小与窗体程序大小: 3.把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序: 4.判断鼠标是否在窗体程序上,在 ...
- 微信小程序开发总结-怀庄酒业投票活动
使用微信小程序投票活动云开发 怀庄酒业活动 使用云开发.开始准备使用django开发自己的后台,但是发现功能比较简单,使用云开发更省事 项目结构: cloudfunctions目录下是三个云函数 ba ...