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 粉丝
推荐阅读
golang中的错误处理
0.1、索引[链接]1、panic当我们执行panic的时候会结束下面的流程: {代码...} {代码...} 但是panic也是可以捕获的,我们可以使用defer和recover实现: {代码...} {代码...} 那什么时候适合panic呢?在 Go 中,pan...
liuyuede阅读 778
花了几个月时间把 MySQL 重新巩固了一遍,梳理了一篇几万字 “超硬核” 的保姆式学习教程!(持续更新中~)
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
民工哥赞 14阅读 2k
算法可视化:一文弄懂 10 大排序算法
在本文中,我们将通过动图可视化加文字的形式,循序渐进全面介绍不同类型的算法及其用途(包括原理、优缺点及使用场景)并提供 Python 和 JavaScript 两种语言的示例代码。除此之外,每个算法都会附有一些技术说...
破晓L赞 8阅读 1k
如何选择适合你的微服务 API 网关:对比 Kong、APISIX、Tyk、Apigee 和其他网关
API 网关并非一个新兴的概念,在十几年前就已经存在了,它的作用主要是作为流量的入口,统一的处理和业务相关的请求,让请求更加安全、快速和准确的得到处理。它有以下传统的功能:
API7_技术团队赞 8阅读 9k评论 2
硬卷完了!MongoDB 打怪升级进阶成神之路( 2023 最新版 )!
前面我们学习:MySQL 打怪升级进阶成神之路、Redis 打怪升级进阶成神之路,然后我们还在继续 NoSQL 的卷王之路。从第一篇文章开始,我们逐步详细介绍了 MogoDB 基础概念、安装和最基本的CURD操作、索引和聚合、工...
民工哥赞 7阅读 704
「刷起来」Go必看的进阶面试题详解
逃逸分析是Go语言中的一项重要优化技术,可以帮助程序减少内存分配和垃圾回收的开销,从而提高程序的性能。下面是一道涉及逃逸分析的面试题及其详解。
王中阳Go赞 4阅读 2k评论 1
架构设计-高性能篇
大家好,我是易安!今天我们谈一谈架构设计中的高性能架构涉及到的底层思想。本文分为缓存架构,单服务器高性能模型,集群下的高性能模型三个部分,内容很干,希望你仔细阅读。
架构狂人赞 4阅读 830
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。