【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化

ops/2024/9/24 21:24:11/

到项目初始化过程了,这边的项目设计完全按照作者自己的喜好来进行定义和设置的,所以各位完全可以按照自己的偏好自喜设置哈。

首先是创建一个工作文件夹哈。
别问为啥不直接quickstart,因为quickstart生成的api名字是greet,改起来很麻烦(头秃)。

> mkdir go-zero>go-zero-demo
> code go-zero>go-zero-demo/

注1: go-zero>go-zero-demo是我随便写的个文件夹名字,写个自己开心的名字就好,这个不影响任何运行结果
注2:第二步是用编辑器打开这个文件夹,我用的是vscode所以直接code打开了,用其他编辑器手动打开该文件夹都是ok的,不影响任何结果。

然后我就按照自己的喜欢库库新建了四个文件夹。
在这里插入图片描述
api就是放api对外接口的地方。
db就是放数据库脚本。
models就是放对应的数据表model。
services就是咱们放服务的地方。

还记得咱们第1部分新建的三张表不?点击标题不记得的话跳转>>>
go零基础】go-zero>go-zero从零基础学习到实战教程 - 1项目表设计

复制黏贴一下哈~
在这里插入图片描述
这个init.sql就是初始化数据库用的,内容如下:(我属于是记不住,所以init数据库部分也给搁这了)
在这里插入图片描述
把他们执行一下,记得先执行init哈。

mysql> create database demo;
Query OK, 1 row affected (0.02 sec)mysql> use demo;
Database changed;mysql> (user.sql的内容)
Query OK, 0 rows affected, 2 warnings (0.03 sec)mysql> (article.sql的内容)
Query OK, 0 rows affected, 1 warning (0.01 sec)mysql> (comment.sql的内容)
Query OK, 0 rows affected (0.01 sec)

如图所示就成功了哈。

那么此刻就可以根据官方文档咱们直接生成model了哈。想看详细解读的官方文档点此一键速达

咱们这个用的是mysql,官档是既可以通过datasource也可以通过sql脚本,咱们直接sql脚本,从咱们db/xxx.sql生成对应的model。

> goctl model mysql ddl --src db/user.sql --dir models/
> goctl model mysql ddl --src db/article.sql --dir models/
> goctl model mysql ddl --src db/comment.sql --dir models/

在这里插入图片描述
指令和执行结果都如图所示哈,然后现在咱们再来看看咱们models文件夹下生成的东西。
在这里插入图片描述
很棒哈,该有的都有了。以usermodel为例,我们可以在usermodel_gen.go文件里面看到,已经帮我们生成了一个User的数据model和增删改查的四个方法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
作者也很友好的给了提示哈,gen的部分由goctl直接生成,不要编辑,盲猜二次执行goctl model mysql ddl --src db/user.sql --dir models/的时候会直接覆盖之前的usermodel_gen.go文件,但不会动usermodel.go文件。

嗯,听人劝,吃饱饭,咱别在usermodel_gen里面写东西哈,新增的方法的业务需要的额外字段逻辑咱们在usermodel里面拼拼凑凑哈。

好了,models生成好了,接下来咱们来整services。

我直接拿了官档中的api示例来做服务生成哈,api示例来源点击快速查看>>>
因为咱们model还不一样,我还得改改它数据结构。

go">syntax = "v1"type (// 定义登录接口的 json 请求体LoginReq {Phone    string `json:"phone"`Password string `json:"password"`}// 定义登录接口的 json 响应体LoginResp {Id     string `json:"id"`Name   string `json:"name"`Type   int64  `json:"type"`Status int64  `json:"status"`}
)type (// 定义获取用户信息的 json 请求体GetUserInfoReq {Id string `json:"id"`}// 定义获取用户信息的 json 响应体GetUserInfoResp {Id     string `json:"id"`Name   string `json:"name"`Type   int64  `json:"type"`Status int64  `json:"status"`}
)type (RegisterReq {Name     string `json:"name"`Phone    string `json:"phone"`Password string `json:"password"`}// 定义获取用户信息的 json 响应体RegisterResp {Id   string  `json:"id"`Name string `json:"name"`Desc string `json:"desc"`}
)// 登录
@server (group:  loginprefix: /v1
)
service user {@handler loginpost /login (LoginReq) returns (LoginResp)
}// 注册
@server (group:  registerprefix: /v1
)
service user {@handler registerpost /register (RegisterReq) returns (RegisterResp)
}// 获取用户详情
@server (jwt:    Authgroup:  userprefix: /v1
)
service user {@handler getUserInfopost /user/info (GetUserInfoReq) returns (GetUserInfoResp)
}

如上述代码哈,咱们给这个user服务给设计了三个接口,接着,咱们一键生成user服务的代码。

> goctl api go --api api/user.api --dir services/user/

执行上述代码之后,打开services文件夹可以清晰地看到咱们user服务的代码已经生成了哈。
goctl生成api or rpc的官档链接也挂一下,方便大家想要了解更多可配置信息。想看详细解读的官方文档点此一键速达

在这里插入图片描述
如法炮制article部分哈。
设计好接口然后一键生成。

我后续会挂个github的demo项目链接,这里就不一一贴了,要不这文章得老长了。

项目完备已经初见雏形哈,下一篇写config配置。


http://www.ppmy.cn/ops/16508.html

相关文章

Git操作与异常处理

文章目录 常用操作1、代码拉取2、代码提交3、暂存区状态4、提交代码5、推送远程仓库 异常处理【1】报错信息:Cannot pull into a repository with state: MERGING【2】报错信息:You have not concluded your merge (MERGE_HEAD exists)【3】报错信息&…

uniapp对uni.request()的封装以及使用

官方文档 uni.request(OBJECT) | uni-app官网 (dcloud.net.cn) uni.request参数 参数名说明url是写api地址的data是用来传值的对于 GET 方法,会将数据 转换为 query string。例如 { name: name, age: 18 } 转换后的结果是 namename&age18。对于 POST 方法且 …

每天学习一个Linux命令之awk

每天学习一个Linux命令之awk 在Linux系统中,awk是一个功能强大的命令行工具,用于文本处理和数据提取。它可以读取文本文件的每一行,根据指定的模式进行匹配,并对满足条件的行进行处理和操作。本文将介绍awk命令的用法和常用选项。…

Java集合框架-Collection-List-vector(遗留类)

目录 一、vector层次结构图二、概述三、底层数据结构四、常用方法五、和ArrayList的对比 一、vector层次结构图 二、概述 Vector类是单列集合List接口的一个实现类。与ArrayList类似,Vector也实现了一个可以动态修改的数组,两者最本质的区别在于——Vec…

39 vue.js

1.1 vue是什么? vue是当下主流的前端框架,用于构建用户界面的 渐进式 自底向上增量开发的MVVM框架。 渐进式:其实每个框架都有自己的特点,在开发的过程中,可以在原有的系统上,把其中一两个功能用VUE…

循环神经网络介绍(RNN)

序列模型 定义:自然语言处理、音频、视频以及其他序列数据的模型 类型: 语音识别 情感分析 机器翻译 特点: 序列数据前后之间有很强的关联性 序列数据的输入输出长度不固定 循环神经网络 定义:循环(递归&#xff…

赋能智慧校园!A3D数字孪生可视化,轻量又高效!

放假之后,学生们会逐步返学,大量人员出入校园,安全更是不容忽视,如何在短时间内对大批人员及设施进行智能监管?数字化转型是关键手段,我们可以融合线上线下数据,搭建3D立体的智慧校园&#xff0…

多客圈子交友系统 uniapp+thinkphp6适配小程序/H5/app/api全开源,多款插件自选,支持个性定制!

网上交友的优点包括: 1. 方便:网上交友可以随时随地进行,不受时间和空间的限制,方便且高效。 2. 匿名性:网上交友可以实现匿名性,用户可以匿名地搜索、聊天或交换信息,保护个人隐私和安全。 3.…