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 粉丝
推荐阅读
golang中的错误处理
0.1、索引[链接]1、panic当我们执行panic的时候会结束下面的流程: {代码...} {代码...} 但是panic也是可以捕获的,我们可以使用defer和recover实现: {代码...} {代码...} 那什么时候适合panic呢?在 Go 中,pan...
liuyuede阅读 717
基于docker-compose搭建prometheus与grafana监控环境
手把手式小白入门prometheus与grafana监控系统搭建整体架构采集与监控流程存在一个具体的主机或者服务,存在一些可以被采集的指标,比如linux系统上面的CPU内存等指标部署了对应服务或主机的采集程序Exporter,该...
龚正阳阅读 174
Docker安装Elasticsearch
docker run --name elaticsearch -p 9200:9200 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms1g -Xmx8g" docker.elastic.co/elasticsearch/elasticsearch:8.6.2
YYGP阅读 157
docker-compose 搭建 redis 集群
# GITHUB地址:[链接]# 1、启动容器 {代码...} # 2、开启集群随便找一个容器进入,这里我选择 node-1 进入。 在进入容器后,输入如下命令开启集群 .## a、使用固定 ip自定义 network 网络 {代码...} ## b、使用动...
xiaoxuan6阅读 140
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。