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
15 声望
0 粉丝
0 条评论
推荐阅读
golang中的错误处理
0.1、索引[链接]1、panic当我们执行panic的时候会结束下面的流程: {代码...} {代码...} 但是panic也是可以捕获的,我们可以使用defer和recover实现: {代码...} {代码...} 那什么时候适合panic呢?在 Go 中,pan...

liuyuede阅读 772

封面图
Docker-Compose
服务可以基于指定的镜像,也可以基于一份 Dockerfile,在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜...

测试菜鸟阅读 664

Docker-compose负载均衡
一、什么是负载均衡 {代码...} 不使用负载均衡使用负载均衡二、负载均衡作用解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力)提供故障转移,实现高可用通过添加或减少服务器数量,提供网站伸缩性...

测试菜鸟阅读 615

Docker安装Elasticsearch
1. 下载镜像docker pull docker.elastic.co/elasticsearch/elasticsearch:8.6.22. 启动容器2.1 创建配置文件docker-compose.yml: {代码...} 2.2 运行容器docker-compose up3. 复制出配置文件、插件、数据目录 {代...

YYGP阅读 492

基于docker-compose搭建prometheus与grafana监控环境
手把手式小白入门prometheus与grafana监控系统搭建整体架构采集与监控流程存在一个具体的主机或者服务,存在一些可以被采集的指标,比如linux系统上面的CPU内存等指标部署了对应服务或主机的采集程序Exporter,该...

龚正阳阅读 425

谨慎在docker-compose.yml中使用$PWD变量
最近在使用Docker Compose部署服务时,我在docker-compose.yml文件中使用了$PWD变量来指定HOST路径。然而,我发现指定的路径并没有达到预期效果。

xiaoz阅读 399

docker-compose 搭建 redis 集群
# GITHUB地址:[链接]# 1、启动容器 {代码...} # 2、开启集群随便找一个容器进入,这里我选择 node-1 进入。 在进入容器后,输入如下命令开启集群 .## a、使用固定 ip自定义 network 网络 {代码...} ## b、使用动...

xiaoxuan6阅读 359

15 声望
0 粉丝
宣传栏