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
}

最新文章

  1. 网络转载——java接口的概念
  2. 9×9扫雷游戏代码-C写的
  3. redmine + apache + mod_fcgid
  4. Studio for ASP.NET Wijmo:使用 C1Pager 对 DataList 控件分页
  5. 【转】图解CSS的padding,margin,border属性(详细介绍及举例说明)
  6. couldn't set tty to ppp discipline invalid argument
  7. 交叉编译lsof for android
  8. Adapter 模式
  9. 高放的c++学习笔记之类
  10. 3月6日 c#语言
  11. 【转】研华Adam6060某段时间后无法连接的问题
  12. qt example
  13. REDGATE又一好用的脚本工具
  14. 缩进(Python很将就格式)
  15. maven项目无法查看方法
  16. Beta冲刺 第一天
  17. JSTL varStatus属性
  18. rk3128 通过串口控制 GPIO
  19. [原创]Xilinx工具关联UEStudio
  20. Linux 添加DNS配置

热门文章

  1. 飞书前端提到的竞态问题,在 Android 上怎么解决?
  2. MyBatis 04 实战
  3. 人非圣贤孰能无过,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang错误处理机制EP11
  4. [BJDCTF2020]Mark loves cat-1|源代码泄露|变量覆盖
  5. Canvas 线性图形(四):矩形
  6. 解决:Uncaught TypeError: $ is not a function
  7. 2022CISCN-satool
  8. LOJ6029「雅礼集训 2017 Day1」市场 (线段树)
  9. 【java】学习路径27-HashSet、TreeSet,HashMap
  10. 配置Windows server dhcp与AD域对接并使用Win1创的用户登录Win2