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

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

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

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

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

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

还记得咱们第1部分新建的三张表不?点击标题不记得的话跳转>>>
【go零基础】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还不一样,我还得改改它数据结构。

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.mzph.cn/bicheng/3528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EMQX】使用websocket订阅EMQX数据

需求:某平台希望通过 websocket 来订阅 EMQX平台上的某些 Topic数据进行处理 1、EMQX 服务配置 前提是EMQX服务正常安装运行了,如果EMQX服务未安装的话,详见以下文章关于如何安装部署服务: 搭建自己的MQTT服务器、实现设备上云(W…

uniapp-css:拼图(不规则图片拼插)、碎片

拼图案例样式 高斯模糊的地方可以对应的使用fliter属性和opacity来调节样式。 其余碎片和图片对应: 这段代码实现了一个拼图效果的Vue组件。以下是对代码的详细解析: 模板部分: 在模板中使用v-for指令遍历imgs数组中的每个图片对象,为每个图片创建一个元素。 使用:cla…

实验一: 设备密码配置与远程管理

1.实验环境 用路由器和交换机搭建实验环境 2.需求描述 实现管理员主机对交换机和路由器的远程管理 设备上配置的密码都要被加密 3.推荐步骤 对路由器配置的步骤如下: 实现路由器和PC的连通性配置VTY密码和特权模式密码在PC上Telnet 到路由器。 对交换机配置的…

柏曼和琪朗护眼灯哪个好?书客、柏曼、琪朗护眼大路灯横测

护眼大路灯是一种备受用户认可的照明电器,但是市面上众多大路灯品牌的评价都良莠不齐,外观几乎清一色的大路灯在品质上却有着很大的区别,很多朋友想要入手但是却迟迟不敢下手。那么,怎么才能买到性能优越、各方面又出色的大路灯呢…

定时重启指定的软件

做一个简单的控制台程序, 让他在指定的时间, 关闭指定的软件(的进程), 关闭后再打开这个软件 ①创建控制台程序, 主要代码: using System.Diagnostics;namespace AutomaticRestart {public class Program{public static string ProcessNames Convert.ToString(CustomConfigMa…

每天一个数据分析题(二百九十三)——数据分析思维

CDA数据分析考试:https://www.cdaglobal.com/ 了解了主要分析维度后再进一步落实到具体的数据表及数据字段时就可以使用哪种思维方法帮助理清线索? A. 业务流程分析 B. 帕累托分析 C. 因果分析 D. 5W2H分析 题目来源于CDA模拟题库 点击此处获取答…

JAVA实现easyExcel模版导出

easyExcel文档 模板注意&#xff1a; 用 {} 来表示你要用的变量 &#xff0c;如果本来就有"{“,”}" &#xff0c;特殊字符用"{“,”}"代替{} 代表普通变量{.}代表是list的变量 添加pom依赖 <dependency><groupId>com.alibaba</groupId&g…

MyPerf4J:一个针对高并发、低延迟应用设计的高性能 Java 性能监控和统计工具。

试用效果&#xff1a; git地址&#xff1a;https://github.com/LinShunKang/MyPerf4J 下载&#xff1a; https://github.com/LinShunKang/Objects/blob/master/zips/CN/MyPerf4J-ASM-3.4.0-SNAPSHOT.zip?rawtrue 配置&#xff1a; # 配置监控应用的名称 app_name MyApp#…

半导体晶圆厂内外网数据单向导出,什么样的方案才安全又便捷?

半导体晶圆厂企业为了隔绝外部⽹络有害攻击、保护⽹络和数据安全&#xff0c;通常采⽤物理隔离的⽅式&#xff0c;将企业内⽹与互联⽹隔离。⽹络隔离后&#xff0c;基于业务开展需求&#xff0c;部分重要数据仍需由内⽹导⼊及导出⾄外部⽹络区域。为保障数据的安全合规性&#…

数据结构--删除单链表中的某一个节点(时间复杂度控制为O(1))

题目描述&#x1f357; 只给定单链表中某个结点p(并非最后一个结点&#xff0c;即p->next!NULL)指针&#xff0c;删除该结点 思路分析&#x1f357; 结点不重要&#xff0c;&#xff0c;重要的是数据 不删自己&#xff0c;删除后面的结点: 1.把后面结点数据复制到当前 2.…

【MySQL】——数据查询操作

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

一主双从redis+哨兵模式以及通过Ansible+Shell快速部署redis哨兵模式

目录 一.主redis配置 1.解压并进行编译安装 2.为redis创建软链接和service管理方便启动 3.修改redis的配置文件 二.配置备redis 三.主redis上查看集群状态 1.主redis登录上去查看状态并且创建数据用于验证同步性 2.备redis查看数据是否同步过来 四.模拟测试 1.主redi…

stm32——GPIO学习

对于许多刚入门stm32的同学们来说&#xff0c;GPIO是我们的第一课&#xff0c;初出茅庐的我们会对GPIO的配置感到疑惑不解&#xff0c;也是劝退我们的第一课&#xff0c;今天我们就来一起学习一下stm32的GPIO&#xff0c;提振一下信心。好的&#xff0c;发车了小卷卷们&#xf…

CDR2024版本免费Windows10包含免费激活码序列号

CorelDRAW2024作为一款专业的平面设计软件&#xff0c;专注于矢量图形编辑与排版&#xff0c;其强大的功能和丰富的工具集为设计师们提供了无限可能。在最新版本中&#xff0c;CorelDRAW引入了一系列令人瞩目的新功能&#xff0c;进一步提升了用户体验和工作效率。以下是对Core…

【css】select实现placeholder效果

场景&#xff1a;使用select下拉选择框的时候&#xff0c;需要像其他控件一样提示默认信息。 问题&#xff1a;表单控件select没有placeholder属性。 解决方案&#xff1a;通过css实现&#xff0c;不需要js <style>select > option[disabled]{ color:#999;cursor: n…

【springMVC】@RequestMapping的作用

1.作用 将指定 URL 的请求绑定到一个特定的方法或类上&#xff0c;从而实现对请求的处理和响应。 RequestMapping注解只能出现在类上或者方法上。 2.value属性 Ant风格的value&#xff08;模糊匹配路径&#xff09;&#xff1a; 1&#xff09;?&#xff0c;代表任意一个字符 …

用docker方式安装openGauss数据库的事项记录

文章目录 &#xff08;一&#xff09;背景&#xff08;二&#xff09;安装&#xff08;2.1&#xff09;安装docker&#xff08;2.2&#xff09;安装openGauss &#xff08;三&#xff09;运行&#xff08;3.1&#xff09;运行openGauss镜像&#xff08;3.2&#xff09;连接open…

30 OpenCV 点多边形测试

文章目录 点多边形测试pointPolygonTest示例 点多边形测试 pointPolygonTest pointPolygonTest( InputArray contour,// 输入的轮廓 Point2f pt, // 测试点 bool measureDist // 是否返回距离值&#xff0c;如果是false&#xff0c;1表示在内面&#xff0c;0表示在边界上&a…

定时器使用

最近工作中遇到了一个场景&#xff0c;需要定时请求后台数据并更新到界面上&#xff0c;在C#中&#xff0c;有三种定时器&#xff1a; 1.System.Timers.Timer 2.System.Threading.Timer 3.System.Windows.Threading.DispatcherTimer 1&#xff0c;2两种方式差不多&#xff0c;都…

白嫖游戏指南,Epic喜加二:《INDUSTRIA》《LISA: Definitive Edition》

前言 Epic喜加二&#xff1a;《INDUSTRIA》《LISA: Definitive Edition》《INDUSTRIA》简介&#xff1a; 《LISA: Definitive Edition》简介&#xff1a; 前言 接下来有时间会分享一些游戏相关可以白嫖的资源&#xff0c;包括游戏本体、游戏素材资源等等。 有需要的小伙伴可以…