go-zero docker-compose 搭建课件服务(一):编写服务api和proto

0、转载

go-zero docker-compose 搭建课件服务(一):编写服务api和proto

0.1源码地址

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

1、创建项目目录

mkdir go-zero-courseware
cd go-zero-courseware

2、安装goctl

# 安装
GOPROXY=https://goproxy.cn/,direct go install github.com/zeromicro/go-zero/tools/goctl@latest

# mac放到/usr/local/bin/下面
ln -s ~/go/bin/goctl /usr/local/bin/goctl

# 校验
goctl -v
goctl version 1.4.0 darwin/amd64 # 看到版本说明安装成功

3、创建服务

创建服务目录

mkdir -p user/api
mkdir -p user/rpc
mkdir -p courseware/api
mkdir -p courseware/rpc

创建user.api、courseware.api、user.proto、courseware.proto

touch user/api/user.api
touch user/rpc/user.proto
touch courseware/api/courseware.api
touch courseware/rpc/courseware.proto

4、编写user.api、user.proto

type (
    // 登录
    LoginRequest {
        LoginName string `json:"loginName"`
        Password  string `json:"password"`
    }
    LoginResponse {
        Id    uint64 `json:"id"`
        Token string `json:"token"`
    }

    // 注册
    RegisterRequest {
        LoginName string `json:"loginName"`
        Username  string `json:"username"`
        Password  string `json:"password"`
        Sex       uint64 `json:"sex"`
    }
    RegisterResponse {
    }

    // 用户信息
    UserInfoRequest {
        Id uint64 `json:"id"`
    }
    UserInfoResponse {
        Id        uint64 `json:"id"`
        Username  string `json:"username"`
        LoginName string `json:"loginName"`
        Sex       uint64 `json:"sex"`
    }
)

service user {
    @handler userLogin
    post /api/user/login (LoginRequest) returns (LoginResponse)
    
    @handler userRegister
    post /api/user/register (RegisterRequest) returns (RegisterResponse)
    
    @handler userInfo
    post /api/user/userInfo (UserInfoRequest) returns (UserInfoResponse)
}
syntax = "proto3";

package user;
option go_package = "./user";

// 登录
message  LoginRequest {
  string LoginName = 1;
  string  Password = 2;
}
message LoginResponse {
  uint64 Id = 1;
  string Token = 2;
}

// 注册
message RegisterRequest {
  string LoginName = 1;
  string Username = 2;
  string Password = 3;
  uint64 Sex = 4;
}
message RegisterResponse {
}

// 用户信息
message UserInfoRequest {
  uint64 Id = 1;
}
message UserInfoResponse {
  uint64 Id = 1;
  string Username = 2;
  string LoginName = 3;
  uint64 Sex = 4;
}

service User {
  rpc Login(LoginRequest) returns(LoginResponse);
  rpc Register(RegisterRequest) returns(RegisterResponse);
  rpc UserInfo(UserInfoRequest) returns(UserInfoResponse);
}

5、编写courseware.api、courseware.proto

type (
    // 新增
    AddRequest {
        Code string `json:"code"`
        Name string `json:"name"`
        Type uint64 `json:"type"`
    }
    AddResponse {
    }

    // 更新
    UpdateRequest {
        Id   uint64 `json:"id"`
        Code string `json:"code"`
        Name string `json:"name"`
        Type uint64 `json:"type"`
    }
    UpdateResponse {
    }

    // 查看
    GetRequest {
        Id uint64 `json:"id"`
    }
    GetResponse {
        Id   uint64 `json:"id"`
        Code string `json:"code"`
        Name string `json:"name"`
        Type uint64 `json:"type"`
    }

    // 删除
    DeleteRequest {
        Id uint64 `json:"id"`
    }
    DeleteResponse {
    }
)

service courseware {
    @handler coursewareAdd
    post /api/courseware/add (AddRequest) returns (AddResponse)
    
    @handler coursewareUpdate
    post /api/courseware/update (UpdateRequest) returns (UpdateResponse)
    
    @handler coursewareGet
    post /api/courseware/get (GetRequest) returns (GetResponse)
    
    @handler coursewareDelete
    post /api/courseware/delete (DeleteRequest) returns (DeleteResponse)
}
syntax = "proto3";

package user;
option go_package = "./courseware";

// 新增
message AddRequest {
  string Code = 1;
  string Name = 2;
  uint64 Type = 3;
}
message AddResponse {
}

// 更新
message UpdateRequest {
  uint64 Id = 1;
  string Code = 2;
  string Name = 3;
  uint64 Type = 4;
}
message UpdateResponse {
}

// 查看
message GetRequest {
  uint64 Id = 1;
}
message GetResponse {
  uint64 Id = 1;
  string Code = 2;
  string Name = 3;
  uint64 Type = 4;
}

// 删除
message DeleteRequest {
  uint64 Id = 1;
}
message DeleteResponse {
}

service Courseware {
  rpc Add(AddRequest) returns(AddResponse);
  rpc Update(UpdateRequest) returns(UpdateResponse);
  rpc Get(GetRequest) returns(GetResponse);
  rpc Delete(DeleteRequest) returns(DeleteResponse);
}
15 声望
0 粉丝
0 条评论
推荐阅读
golang中的错误处理
0.1、索引[链接]1、panic当我们执行panic的时候会结束下面的流程: {代码...} {代码...} 但是panic也是可以捕获的,我们可以使用defer和recover实现: {代码...} {代码...} 那什么时候适合panic呢?在 Go 中,pan...

liuyuede阅读 729

封面图
一个HTTP请求的曲折经历
作为程序员的我们每天都在和网络请求打交道,而前端程序员接触的最多的就是HTTP请求。平时工作中,处理网络请求之类的操作是最多的了。但是一个请求从客户端发出到被服务端处理、再回送响应,再被客户端接收这一...

nero24阅读 5.1k评论 1

Nginx 一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...
早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增...

民工哥23阅读 1.1k

封面图
Golang 中 []byte 与 string 转换
string 类型和 []byte 类型是我们编程时最常使用到的数据结构。本文将探讨两者之间的转换方式,通过分析它们之间的内在联系来拨开迷雾。

机器铃砍菜刀24阅读 58.5k评论 2

最好用的 python 库合集
🎈 分词 - jieba优秀的中文分词库,依靠中文词库,利用词库确定汉子之间关联的概率,形成分词结果 {代码...} 🎈 词云库 - wordcloud对数据中出现频率较高的 关键词 生成的一幅图像,予以视觉上的突出 {代码...} 🎈 ...

tiny极客11阅读 2.9k评论 2

封面图
计算机网络连环炮40问
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~

程序员大彬14阅读 1.9k

万字详解,吃透 MongoDB!
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常...

JavaGuide8阅读 1.8k

封面图
15 声望
0 粉丝
宣传栏