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

embedded/2024/10/18 2:32:36/

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

首先是创建一个工作文件夹哈。
别问为啥不直接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/embedded/27993.html

相关文章

Django后台项目开发实战七

为后台管理系统换风格 第七阶段 安装皮肤包 pip install django-grappelli 在 setting.py 注册 INSTALLED_APPS [grappelli,django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.stat…

蓝桥杯2022年第十三届决赛真题-最大数字

知识点: double -------(max)10的308次幂 long long ---------(max)10的18次幂 过 96% 的方法 贪心思想:根据数据范围,很容易想到应该用for遍历每一位,复杂度是O(1)。从前往后看每一位,比较通过到达9和通过-到达9的个…

图像处理的一些操作(2)

图像处理 9. 转换类型9.1转换成浮点数类型9.2转换成无符号字节类型 10.颜色空间转换10.1RGB转GRAY10.2RGB转HSV10.3RGB转LAB10.4HSV转RGB10.5LAB转RGB10.6 convert_colorspace函数进行颜色转换 11.标签化处理图像11.1导入模块11.2加载图片11.3RGB图像转灰度图像11.4遍历图像11.…

springcloud第4季 springcloud-alibaba之分布式事务seata

一 seata介绍 1.1 seata介绍 1.seata是一款解决分布式事务的解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 二 seata的操作 2.1 seata操作 1.seata的安装 2.seata数据库导入脚本 3.seata的server配置安装

基于SSM的个人博客系统(五)

前面内容请移步 基于SSM的个人博客系统(四) 个人博客系统的设计与实现免费源码论文 个人博客系统的设计与实现毕业设计论文源码 第六章 系统测试 6.1 前台模块测试 浏览器的网址输入框中输入正确的地址既可以看到系统前台页面: 图5-1前台展示页面 …

JMeter性能压测脚本录制

第一步:电脑打开控制面板设置代理服务器 第二步:jmeter的测试计划添加一个HTTP(S)脚本记录器 在脚本记录器里配置好信息,然后保存为脚本文件(.*表示限定) 此方框内容为项目地址(可改…

Istio介绍

1.什么是Istio Istio是一个开源的服务网格(Service Mesh)框架,它提供了一种简单的方式来为部署在Kubernetes等容器编排平台上的微服务应用添加网络功能。Istio的核心功能包括: 服务治理:Istio能够帮助管理服务之间的…

52.HarmonyOS鸿蒙系统 App(ArkTS)配置文件添加多个权限方法

52.HarmonyOS鸿蒙系统 App(ArkTS)配置文件添加多个权限方法 module.json5